Spring Boot中GetMapping映射异常:无后缀访问JSON文件失败
问题排查与解决方案
你当前的需求是通过http://localhost:8081/TestResults访问指定目录下的TestResults.json文件,但目前仅带.json后缀的路径生效。结合你的代码,从以下几个方向排查:
1. 验证Controller映射是否触发
启动应用后访问http://localhost:8081/TestResults,查看控制台输出:
- 如果没有打印
fileName:相关日志,说明该Controller的映射未被Spring识别:- 检查
FileController是否和SssApplication在同一包或子包下(Spring Boot默认扫描主类所在包及子包),若不在,需在@SpringBootApplication上添加@ComponentScan(basePackages = "你的Controller所在包路径")。 - 确认没有其他优先级更高的映射(如静态资源处理器)拦截请求:若
Demo目录被配置为静态资源目录,Spring会优先返回静态文件,但不带后缀的路径不会被静态资源规则匹配,因此应进入Controller逻辑。
- 检查
2. 确认文件查找逻辑是否正常
如果控制台打印file: null,说明文件未找到:
- 检查
C:\\Users\\Hello\\Documents\\Demo目录是否存在,以及TestResults.json是否在该目录或其子目录下。可在getFile方法开头添加日志:System.out.println("Directory exists: " + new File(directoryPath).exists()); - 验证
findFileRecursively方法的递归查找逻辑:若文件在深层子目录,确认方法是否能遍历到;也可先简化方法,直接在根目录查找测试:private File findFileRecursively(File directory, String fileName) { File target = new File(directory, fileName); return target.exists() && target.isFile() ? target : null; } - 检查文件权限:确保应用程序有访问该目录及文件的读写权限。
3. 修正代码细节
当前代码中fullFileName的处理逻辑是正确的,但可优化避免潜在问题:
// 避免重复拼接后缀 String fullFileName = fileName.endsWith(".json") ? fileName : fileName + ".json";
4. 检查Spring Boot配置
- 确认
application.properties/application.yml中是否配置了路径前缀(如server.servlet.context-path=/api),若有,访问路径需改为http://localhost:8081/api/TestResults。 - 排查是否存在自定义Filter/Interceptor拦截了请求,导致Controller未接收到请求。
内容的提问来源于stack exchange,提问作者Hiruthere
相关产品推荐
相关产品推荐

