报错过程
原文件是这样写的
@Controller
@RequestMapping("manage")
public class ManageController {
/**
* 上传文件接口
* */
@RequestMapping(value = "/uploadFile", method = POST)
@ResponseBody
@SystemLog(module="通知公告",methods="上传文件接口")
public ResponseResult<Object> uploadFile(@RequestParam("file") MultipartFile file){}
}
在跑完这个接口后,后台报错
[THYMELEAF][http-nio-2320-exec-9] Exception processing template "manage/uploadFile": An error happened during template parsing (template: "/views/manage/uploadFile.html")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "/views/manage/uploadFile.html")
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:235) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
都报错可知
因没写ResponseBody,THYMELEAF去根据请求名,去找页面去了。
/views/manage/uploadFile.html
因没有这个页面后台报错。
错误排查过程:
1.我这边前端用的layui的upload控件
upload.render({
elem: '#input'
,url: 'uploadFile'
,accept:'file'
,size:"50000"//kb
,before: function (obj) {
layer.load();
})
来进行上传文件调用后台的,所以报错被是upload控件封装了。报错如下:


起初没想到这个报错被封装的问题,以为是我写的拦截器对请求进行拦截报的错,排查了很长时间的拦截器问题。
究其原因:
如果controller层用的@RestController注解,就不会出现此问题
而我这边用到的是@Controller注解,那么返回则需要加上@ResponseBody注解。
如果未加,系统会去后台找请求路径同名的html页面(取决于拦截器写的后缀,还可能是jsp文件等)进行返回。
如果无需通过string返回页面,可以使用@RestController注解,那就不用加@ResponseBody了,也可以使用@RestController再用ModuleAndView来返回页面
文章描述了一个在使用Thymeleaf模板引擎时遇到的错误,该错误发生在尝试解析/uploadFile模板时。问题的根本原因是Controller方法中未使用@ResponseBody注解,导致Thymeleaf试图寻找一个名为/uploadFile的HTML页面。使用Layui的上传组件调用后台接口,当Controller使用@Controller而不是@RestController时,需要添加@ResponseBody以防止系统查找同名的HTML页面。解决方案包括使用@RestController注解或在@Controller中添加@ResponseBody注解。
872

被折叠的 条评论
为什么被折叠?



