天天看點

springboot通路映射(RESTful)1. 控制器方式映射2 配置類方式映射REST風格問題

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字尾。目錄結構如下:

springboot通路映射(RESTful)1. 控制器方式映射2 配置類方式映射REST風格問題

映射結果為:

springboot通路映射(RESTful)1. 控制器方式映射2 配置類方式映射REST風格問題

【注意】

如果在控制器類controller.HelloController.class中以

@ResponseBody
@RequestMapping("/hello")
public String hello(){
        return "你好!";
}
           

@ResponseBody

@RequestMapping("/hello") 的方式給方法進行标注,則會在該請求頁面傳回“你好!”字元串。

springboot通路映射(RESTful)1. 控制器方式映射2 配置類方式映射REST風格問題

步驟總結

1.編寫控制類,标注@Controller

2.編寫方法(方法名任意),标@RequestMapping({"/","/index"})

3.傳回要映射到的頁面等。return “index”:映射到index.html頁面

2 配置類方式映射

springboot通路映射(RESTful)1. 控制器方式映射2 配置類方式映射REST風格問題

方式一

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” 資料并不起作用。:

springboot通路映射(RESTful)1. 控制器方式映射2 配置類方式映射REST風格問題
{
      "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
           

繼續閱讀