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

Thymeleaf报错Error resolving template [addlocation]问题排查

问题原因

这是Spring MVC整合Thymeleaf的默认视图解析规则导致的:

  • 当控制器方法使用@Controller注解、方法没有标注@ResponseBody、返回值为void时,Spring不会把方法的执行结果直接作为HTTP响应返回,而是会默认将当前请求的路径名作为视图名称,交给配置的视图解析器查找对应模板渲染。
  • 你的/addlocation接口完全符合上述特征:方法返回void、没有加@ResponseBody,业务逻辑(更新坐标、写入数据库)执行完成后,Thymeleaf会自动查找名为addlocation的模板文件,但你的templates目录下只有map.html,不存在addlocation.html,自然抛出模板不存在的错误。
  • 你觉得功能运行正常,是因为报错发生在业务逻辑执行完毕后的视图渲染阶段,前面的坐标更新、入库逻辑已经正常跑完了,所以业务效果没受影响,但报错是真实存在的。
修复方案

不要修改类上的@Controller注解(否则你的/map页面接口会失效,无法返回Thymeleaf模板),只需要给addLocation方法加上@ResponseBody注解即可,这个注解会告诉Spring:当前方法不需要走视图解析流程,方法执行完直接返回响应即可,返回值为void时默认返回200状态码空响应。
修改后的接口代码:

@PostMapping("/addlocation")
@ResponseBody
public void addLocation(@RequestBody GpsMessage message) {
    if(message.getGpsTimestamp() == 0L) {
        bestLat = message.getTriLat();
        bestLon = message.getTriLon();
    } else {
        bestLat = message.getGpsLat() / divisor;
        bestLon = message.getGpsLon() / divisor;
    }
    DbConnection.writeLocation(message);
}

额外提一句和当前报错无关的小问题:你map.html里的Thymeleaf行内JS变量没有写兜底默认值,一旦后端传参为空会直接触发JS语法错误,建议改成如下写法更稳妥:

<script th:inline="javascript">
    var myLat = /*[[${latitude}]]*/ 0.0;
    var myLon = /*[[${longitude}]]*/ 0.0;
</script>

内容的提问来源于stack exchange,提问作者Guy Fawkes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:12:24