Springboot+thymeleaf的幾個坑


記錄一下使用springboot的幾個坑

目錄結構如下:

 

 

 

我的預期是訪問"/query"路徑應該是跳轉到hello.html

hello.html代碼如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Hello World!
<div th:text="${msg}">嘿嘿嘿</div>
</body>
</html>

 

控制器代碼如下:

@RestController
public class TAdminController {
    /**
     * 服務對象
     */
    @Resource
    private TAdminService tAdminService;

    @RequestMapping("/query")
    public String query(Model model){
        model.addAttribute("msg","啦啦啦");
        return "hello";
    }

}

 

錯誤一:視圖解析器跳轉直接打印出來

訪問路徑之后直接就打印出來了,這與預期不符,於是我在application.yml文件中加入了如下配置

spring:
  thymeleaf:
    cache: false
    prefix: classpath:/static/
    suffix: .html
    encoding: UTF-8

 

但是效果還是一樣的,仔細檢查發現是注解用錯了

 

應該改為@Controller

為什么換了controller注解就好了呢?

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

 

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

例如:本來應該到hello.html頁面的,則其顯示login.

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

3)如果需要返回json或者xml或者自定義mediaType內容到頁面,則需要在對應的方法上加上@ResponseBody注解

@ResponseBody
作用:

該注解用於將Controller方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式后(如:json格式),寫入到Response對象的body數據區。

使用時機:

返回的數據不是html標簽的頁面,而是其他某種格式的數據時(如json、xml等)使用

當我們不需要講數據封裝,而是需要實現頁面的跳轉的時候,就將@responseBody去掉,然后最后返回跳轉的頁面名稱就好.

 

錯誤二:404錯誤

修改后發現還是報404的錯誤

 

 

 此時我們thymeleaf模板路徑也設置了,后綴也設置了,為什么還是報錯了呢,回到控制器發現

 

 

 提示Cannot resolve MVC View 'hello' ,找不到視圖hello,那么說明我們的thymeleaf配置沒起到作用,回到pom文件看看發現thymeleaf依賴好像不對, 我是直接在創建項目的時候勾選了thyme leaf的,他的thymeleaf依賴如下:

 

 

去maven倉庫找到Spring Boot Starter Thymeleaf依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.4.0</version>
</dependency>

 要用Spring Boot Starter Thymeleaf才行,那個那個單純的thymeleaf不能用,跟mybatis與mybatis-spring整合包的區別差不多。

 

更換新的依賴后點擊右上角的Load Maven Changes

 

 注:這里的版本號可以不用寫,Spring Boot有版本仲裁中心,以后我們導入依賴默認是不需要寫版本;(沒有在dependencies里面管理的依賴自然需要聲明版本號)

再次運行項目:

 

 成功~~~

補充一個新問題

當我點擊某個修改按鈕的時候,url上帶的是控制器路徑:http://127.0.0.1:8900/tStaff/toUpdate/75

 

 

 

但是點擊進去后,訪問靜態資源會附帶Controller的地址

 

 

 

仔細看html中的引入

 

 

發現是/admin前面加了個"." 去掉"." 后成功解決

 

 

 

 

 

錯誤三:

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4182fa28] was not registered for synchronization because synchronization is not active
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4182fa28]

 

我這里使用的是SpringBoot+Mybatis-Plus,在添加新用戶是報這個錯:

 

 

通過debug發現說無法設置值為1339225753495437313的id,類型不匹配,我數據庫id是設置的自增長,但是這里entity層需要再次設置一下id自增長,重啟就OK了

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM