1. 程式人生 > >springboot整合thymeleaf中爬過的坑

springboot整合thymeleaf中爬過的坑

使用springboot 搭建了框架,然後再加入thymeleaf ,經過測試後發現thymeleaf 完全無效,

錯誤:不能返回頁面,只返回字串。

application.properties的配置:

#thymeleaf
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.enabled=true
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode=HTML5

專案路徑


Controller:

@RestController
@RequestMapping("/main")
public class mainCrontroller {


    @RequestMapping(value="/to_login")
    public String toLogin() {
        return "login";
    }
    
    @RequestMapping("/them")
    public ModelAndView  them(ModelAndView  model) {
    	model.setViewName("hello");
    	model.addObject("name","limingcong");
    	return model;
    }
    
    
}

無論返回 字串 或者返回 ModelAndView,最終頁面只顯示了字串,並沒有跳去目標頁面,一度以為的maven的依賴版本問題造成的,測試了很久,最終發現是Controller的問題。

因為在controller類中一直用的是@ResController這個註解,後來查了下資料發現:

官方文件:
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
意思是:
@RestController註解相當於@ResponseBody + @Controller合在一起的作用。

1)如果只是使用@RestController註解Controller,則Controller中的方法無法返回jsp頁面,配置的檢視解析器InternalResourceViewResolver不起作用,返回的內容就是Return 裡的內容。

例如:本來應該到success.jsp頁面的,則其顯示success.

2)如果需要返回到指定頁面,則需要用 @Controller配合檢視解析器InternalResourceViewResolver才行。

3)如果需要返回JSON,XML或自定義mediaType內容到頁面,則需要在對應的方法上加上@ResponseBody註解。

原來,並沒有整合失敗 ,而是因為註解是 @RestController 配置的檢視解析器InternalResourceViewResolver不起作用,所以返回的內容是字串(就是Return 裡的內容),把 @RestController 修改為 @Controller 後,檢視解析器InternalResourceViewResolver才能成功呼叫返回指定頁面

修改:修改註解為@Controller

修改後測試成功。