TemplateInputException

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,因为这样不涉及视图的渲染

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值