TemplateInputException
介绍:
springboot里面视图解析异常
1.具体报错信息
"org.thymeleaf.exceptions.TemplateInputException: Error resolving template [test/setsession], template might not exist or might not be accessible by any of the configured Template Resolvers\r\n\tat org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869)\r\n\tat org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607)\r\n\tat org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098)\r\n\tat org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072)\r\n\tat org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:362)\r\n\tat org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:189)\r\n\tat org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373)\r\n\tat org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:626)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat ......
1.报错的示例代码
@Controller
@RequestMapping("test")
@Slf4j
@Api(tags = "测试的controlelr")
public class HelloController {
/**
* 这是一个视图解析的方法
hello====> hello+".html"===>Hello.html
到相应的路径找Hello.html页面
*/
@GetMapping("/hellohtml")
@ApiOperation(value = "跳转到html页面")
public String getHtml() {
return "hello";
}
/**
* 返回json数据
* @return
*/
@GetMapping("/hellojson")
@ApiOperation(value = "跳转到html页面")
public R getjson() {
String str = "helloworld";
return R.ok("请求成功返回json").put("data",str);
}
}
原因:
返回json数据的时候方法上没有@ResponseBody注解
2.解决方案
第一种方法
-
controller类上使用@Controller
-
方法上配合使用@ResponseBody
此时方法的返回值以json字符窜的格式返回给浏览器
第二种方法
在controller类上直接加上一个注解@RestController
说明:
@RestController=@Controller+@ResponseBody
3.改造后的代码
@Controller
@RequestMapping("test")
@Slf4j
@Api(tags = "测试的controlelr")
public class HelloController {
/**
* 这是一个视图解析的方法
hello====> hello+".html"===>Hello.html
到相应的路径找Hello.html页面
*/
@GetMapping("/hellohtml")
@ApiOperation(value = "跳转到html页面")
public String getHtml() {
return "hello";
}
/**
* 返回json数据
* @return
*/
@GetMapping("/hellojson")
@ResponseBody //这个注解表示该方法返回值时json格式的字符窜
@ApiOperation(value = "跳转到html页面")
public R getjson() {
String str = "helloworld";
return R.ok("请求成功返回json").put("data",str);
}
}
也可以这样
@RestController
@RequestMapping("test")
@Slf4j
@Api(tags = "测试的controlelr")
public class HelloController {
/**
* 返回json数据
* @return
*/
@GetMapping("/hellojson")
@ApiOperation(value = "跳转到html页面")
public R getjson() {
String str = "helloworld";
return R.ok("请求成功返回json").put("data",str);
}
}
说明:
这种方法的弊端时,
下面的方法返回值都是json格式的字符窜
如果进行视图解析,那么只能使用
@Controller+@ResponseBody这种组合方式
重点:
视图解析的时候类上只需要
- controller类上有@Controlelr
- 方法上只有@RequestMapping(),类上不能有@ResponseBody这个注解
否则,会返回String格式字符窜,并不会对视图进行解析
4.选择
如果时测试写demo的时候建议使用
@Controller+@ResponseyBody的方式进行返回json
如果时前后端分离
直接使用@RestController,因为这样不涉及视图的渲染