【问题标题】:Spring Boot Thymeleaf ViewResolver on Rest controllersRest控制器上的Spring Boot Thymeleaf ViewResolver
【发布时间】:2017-04-09 10:05:11
【问题描述】:

问候。

我有一个 Spring Boot 应用程序 (v. 1.4.1)。 以前从

设置Thymeleaf
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>net.sourceforge.nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
    <version>1.9.22</version>
</dependency>

nekohtml - 支持 thymeleaf 模板中不严格的 html。 我仅将 Thymeleaf 模板用于电子邮件模板。该应用程序代表 REST API,所有控制器都返回 json 数据。

但是,在我为电子邮件设置 Thymeleaf 之后,一些请求正在为它们寻找 Thymeleaf 模板并返回 code 500

Thymeleaf 配置(yml,这是 thymeleaf 的所有配置,没有其他 JAVA 配置,Spring Boot 处理一切):

  thymeleaf:
    check-template-location: true
    prefix: classpath:/templates/
    suffix: .html
    mode: LEGACYHTML5
    encoding: UTF-8
    content-type: text/html 
    cache: true

示例控制器和错误:

@RequestMapping(value = "/register", method = RequestMethod.POST)
public JsonResponse AddUser(@RequestBody @Valid User user, WebRequest request) throws SQLException {
    String result = userService.RegisterUser(user);
    if(result.equals("done")) {
        try {
            eventPublisher.publishEvent(new OnRegistrationCompleteEvent(user, request.getLocale()));
        } catch (Exception me) {
            return new JsonResponse("FAIL", "Unknown on event publishing: "+ me.getMessage());
        }
        return new JsonResponse("OK", "");

    } else if(result.equals("duplicate")) {
        return new JsonResponse("FAIL", "duplicate");
    }
    return new JsonResponse("FAIL", "Unknown");
}

错误:

2016-11-25 11:02:04.285 DEBUG 15552 --- [nio-8080-exec-1] o.s.s.w.a.i.FilterSecurityInterceptor    : Authorization successful
2016-11-25 11:02:04.285 DEBUG 15552 --- [nio-8080-exec-1] o.s.s.w.a.i.FilterSecurityInterceptor    : RunAsManager did not change Authentication object
2016-11-25 11:02:04.285 DEBUG 15552 --- [nio-8080-exec-1] o.s.security.web.FilterChainProxy        : /register reached end of additional filter chain; proceeding with original chain
2016-11-25 11:02:04.289 DEBUG 15552 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing POST request for [/api/register]
2016-11-25 11:02:04.291 DEBUG 15552 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /register
2016-11-25 11:02:04.294 DEBUG 15552 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public com.springapp.models.common.JsonResponse com.springapp.controllers.api.IndexController.AddUser(com.springapp.models.common.User,org.springframework.web.context.request.WebRequest) throws java.sql.SQLException]
2016-11-25 11:02:04.329 DEBUG 15552 --- [nio-8080-exec-1] m.m.a.RequestResponseBodyMethodProcessor : Read [class com.springapp.models.common.User] as "application/json;charset=UTF-8" with [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@682ef707]
2016-11-25 11:02:15.620 DEBUG 15552 --- [nio-8080-exec-1] o.s.w.servlet.view.BeanNameViewResolver  : No matching bean found for view name 'register'
2016-11-25 11:02:15.635 DEBUG 15552 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Rendering view [org.thymeleaf.spring4.view.ThymeleafView@1a462947] in DispatcherServlet with name 'dispatcherServlet'
2016-11-25 11:02:15.647 ERROR 15552 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8080-exec-1] Exception processing template "register": Error resolving template "register", template might not exist or might not be accessible by any of the configured Template Resolvers
2016-11-25 11:02:15.651 DEBUG 15552 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Error rendering view [org.thymeleaf.spring4.view.ThymeleafView@1a462947] in DispatcherServlet with name 'dispatcherServlet'

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "register", template might not exist or might not be accessible by any of the configured Template Resolvers

【问题讨论】:

  • 小心 - 前缀:classpath:/templates/ - 设置你的前缀并将你的模板放在 /WEB-INF/templates 因为如果 thymeleaf 被配置为使用 ClassLoaderTemplateResolver 那么它将在 jars 中搜索模板.

标签: java spring spring-mvc spring-boot thymeleaf


【解决方案1】:

对不起大家,那是我的错误。以前我将应用程序从 Spring MVC 迁移到 Spring Boot,并将其拆分为 REST API 和前端。 特别是那个控制器没有被注释为@RestController。固定。

【讨论】:

  • 我做了同样的事情并以同样的方式修复它。
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 2020-01-24
  • 2020-10-19
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多