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
修改後測試成功。