You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:52:21