Spring Boot Thymeleaf ViewResolver на Rest контролери

Поздрав.

Имам приложение 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 - за поддържане на нестриктния html в шаблоните на thymeleaf. Използвам шаблони на Thymeleaf само за шаблони за имейл. Приложението представлява REST API, като всички контролери връщат json данни.

Въпреки това, след като зададох Thymeleaf за имейли, някои заявки търсят шаблони на Thymeleaf за тях и връщат code 500.

Конфигурация на Thymeleaf (yml, това е цялата конфигурация за thymeleaf, няма други JAVA конфигурации, Spring Boot Handling всичко):

  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

person user1935987    schedule 25.11.2016    source източник
comment
Бъдете внимателни относно - prefix: classpath:/templates/ - задайте своя префикс и поставете вашите шаблони в /WEB-INF/templates, защото ако thymeleaf е конфигуриран да използва ClassLoaderTemplateResolver, тогава той ще търси шаблони в буркани.   -  person Zildyan    schedule 25.11.2016


Отговори (1)


Съжалявам всички, това беше моя грешка. Преди това мигрирах приложението от Spring MVC към Spring Boot, като го разделих на REST API и предния край. По-специално този контролер не беше анотиран като @RestController. Фиксирана.

person user1935987    schedule 25.11.2016
comment
И направих абсолютно същото и го поправих по същия начин. - person pillingworth; 10.04.2017