Spring_Boot專欄 | ||
---|---|---|
上一篇 | 主目錄 | 下一篇 |
目錄
- 1. 控制器方式映射
- 2 配置類方式映射
-
- 方式一
- 方式二
- REST風格
- 問題
-
- 1 put被當做post
【前言】
通路映射:在浏覽器位址欄中輸入http://localhost:8080/index,其中/index的請求映射到某方法進行處理或者映射到某個頁面
通路映射又兩種方式,控制器和配置類。
傳統的
url
位址:http://localhost:8080/addEmp?id=01&name=shane&… ,而使用
REST
風格更能直覺簡介。
1. 控制器方式映射
在controller.HelloController.class類中【需要在類名标明@Controller】:
@RequestMapping({"/","/index"})
public String index(){
return "index";
}
這個方法将/和/index的請求映射到靜态資源的index.html頁面,由于是@RequestMapping()方法,會自動拼接上.html字尾。目錄結構如下:
映射結果為:
【注意】
如果在控制器類controller.HelloController.class中以
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "你好!";
}
@ResponseBody
@RequestMapping("/hello") 的方式給方法進行标注,則會在該請求頁面傳回“你好!”字元串。
步驟總結
1.編寫控制類,标注@Controller
2.編寫方法(方法名任意),标@RequestMapping({"/","/index"})
3.傳回要映射到的頁面等。return “index”:映射到index.html頁面
2 配置類方式映射
方式一
1.配置類實作WebMvcConfigurer接口。注意标注@Configuration
2.重寫addViewControllers()方法,@Override
3.注冊視圖控制器,将addViewController("/login")中/login映射到視圖(頁面)setViewName(“login”) login.html
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
}
方式二
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//所有的WebMvcConfiguration元件都會一起作用
@Bean//将元件注冊在容器中
public WebMvcConfigurer webMvcConfigurer(){
WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer(){
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/main.html").setViewName("dashboard");
}
};
return webMvcConfigurer;
}
REST風格
URI:/資源名稱/資源辨別 HTTP
請求方式
區分對資源CRUD操作
普通CRUD(uri來區分操作) | RestfulCRUD | |
---|---|---|
查詢 | getEmp | emp—GET |
添加 | addEmp?xxx | emp—POST |
修改 | updateEmp?id=xxx&xxx=xx | emp/{id}—PUT |
删除 | deleteEmp?id=1 | emp/{id}—DELETE |
例如:
實驗功能 | 請求URI | 請求方式 |
---|---|---|
查詢所有員工 | emps | GET |
來到添加頁面 | emp | GET |
添加員工 | emp | POST |
來到修改頁面(查出員工進行資訊回顯) | emp/1 | GET |
修改員工 | emp | PUT |
删除員工 | emp/1 | DELETE |
問題
1 put被當做post
在實作 restful 的更新操作時,需要将表單資料以 PUT 方法送出:
當emp!=null,即需要put請求進行修改時,伺服器卻将其作為post來處理。
原因:
在 Spring Boot 的 META-INF/spring-configuration-metadata.json 配置檔案中,預設是關閉 Spring 的 hiddenmethod 過濾器的,是以直接在表單送出的資料中添加 “_method” 資料并不起作用。:
{
"name": "spring.mvc.hiddenmethod.filter.enabled",
"type": "java.lang.Boolean",
"description": "Whether to enable Spring's HiddenHttpMethodFilter.",
"defaultValue": false
},
解決方式:
在 Spring Boot 的配置檔案 application.properties 中将 hiddenmethod 過濾器設定為啟用即可:
# 啟用hiddenMethod過濾器
spring.mvc.hiddenmethod.filter.enabled=true