SpringMVC常用註解


回顧:SpringMVC快速入門,搭建SpringMVC開發環境


常用註解

1.RequestMapping註解:建立請求URL和處理方法之間的對應關係

回顧:RequestMapping註解詳解

2.RequestParam註解:把請求中的指定名稱的參數傳遞給控制器中的形參賦值

@Controller
@RequestMapping(value ="/param")
public class RequestParamController {
    /*
    屬性
		value:請求參數中的名稱
		required:請求參數中是否必須提供此參數。不寫默認是true,必須提供該請求參數,否則404
		defaultValue:默認值
     */
    @RequestMapping(value ="/test")
    public String add(@RequestParam(value = "name",required = false,defaultValue = "無名氏") String name,
                      @RequestParam(value = "age") Integer age){
        System.out.println(name+"  "+age);
        //http://localhost:8080/param/test?name=張三三&age=10     控制檯輸出:  張三三    10
        //http://localhost:8080/param/test?name=張三三            控制檯輸出:  HTTP Status 400 – Bad Request
        //http://localhost:8080/param/test?age=18                控制檯輸出:  無名氏    18
        return "login";
    }
}

3.RequestBody註解:獲取請求體的內容,參數拼接成一個字符串

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

@Controller
@RequestMapping(value = "/body")
public class RequestBodyController {
    /*接收前端傳入的參數,並將參數拼接成一個字符串  注意:用於POST請求
    屬性
        required:是否必須有請求體,默認值是true
     */
    @RequestMapping(value = "/test")
    public String show(@RequestBody String body){
        System.out.println(body);
        //name=%E5%91%A8%E5%93%88%E5%93%88&age=23&address=%E6%B1%9F%E8%A5%BF
        return "login";
    }

}

4.PathVariable註解:綁定url中的佔位符

@Controller
@RequestMapping(value = "/pathVariable")
public class PathVariableController2 {
    /*@PathVariable:提供對RestFul風格的支持
    Restful風格的URL:請求路徑一樣,可以根據不同的請求方式去執行後臺的不同方法
	
	可以通過 GET、 POST、 PUT、 PATCH、 DELETE 等方式對服務端的資源進行操作。其中,GET 用於查詢資源,POST 用於創建資源,
	PUT 用於更新服務端的資源的全部信息,PATCH 用於更新服務端的資源的部分信息,DELETE 用於刪除服務端的資源。

         根據ID刪除
           請求: http://localhost:8080/pathVariable/1
            	 http://localhost:8080/pathVariable/2
            ......
            ...
    */
    @RequestMapping(value = {"/{id}"},method = RequestMethod.DELETE)
    public String delete(@PathVariable(value = "id")Integer id){
        System.out.println("刪除服務端的資源  id爲"+id);
        return "login";
    }

    //根據ID查詢
    @RequestMapping(value = {"/{id}"},method = RequestMethod.GET)
    public String getById(@PathVariable(value = "id")Integer id){
        System.out.println("查詢資源   id爲"+id);
        return "login";
    }
}

使用HTTP Client工具測試體現:請求路徑一樣,可以根據不同的請求方式執行後臺的不同方法
在這裏插入圖片描述
DELETE 方式,執行delete方法在這裏插入圖片描述
GET方式,執行getById方法
在這裏插入圖片描述

5.RequestHeader註解:獲取指定請求頭的值

/*
屬性
    value:請求頭的名稱
    required:請求參數中是否必須提供此請求頭。不寫默認是true,必須提供有該請求頭。
    defaultValue:默認值
 */
@Controller
@RequestMapping(value ="/header")
public class RequestHeaderController {
    @RequestMapping(path="/test")
    public String show(@RequestHeader(value="Host",required = true,defaultValue = "沒有值") String header) {
        System.out.println(header);
        //請求  http://localhost:8080/header/test      控制檯輸出 localhost:8080
        return "login";
    }
}

6.CookieValue註解:獲取指定cookie的名稱的值

在這裏插入圖片描述

@Controller
@RequestMapping(value = "/cookie")
public class CookieValueController {
    
    /*
    屬性
   ·value:cookie的名稱
    required:請求參數中是否必須提供此cookie的名稱。不寫默認是true,必須提供有該cookie的名稱。
    defaultValue:默認值

     */
    @RequestMapping(value = "/test")
    public String show(@CookieValue(value = "JSESSIONID",required = false,defaultValue = "JSESSIONID沒有值")String jsid){
        System.out.println(jsid);
        //6598974983EC4013BFC5375337B6EBFC
        return "login";
    }
}

7.SessionAttributes註解:用於多次執行控制器方法間的參數共享(全局Session設置)

①Model(模型信息)的使用

  • 作用:SpringMVC會把Model(模型信息)中的的數據放入到request域對象中,頁面可以通過EL表達式來取request域中的數據。
  • 示例:後臺使用Model的addAttribute方法,頁面使用EL表達式取數據。

後臺

@Controller
@RequestMapping(value = "/model")
public class ModelController {
    /* SpringMVC會把Model(模型信息)中的的數據放入到request域對象中
            後臺使用Model的addAttribute方法添加信息
            前臺頁面使用EL表達式可取數據
     */
    @RequestMapping(value = "/test")
    public String getUser(Model model){
        //添加name信息,SpringMVC會把name存儲到HttpServletRequest作用域中
        model.addAttribute("name","周哈哈");
        return "login";
    }
}

前臺 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>你已入門啦</h3>
<div>
    ${name}
</div>
</body>
</html>

在這裏插入圖片描述

②SessionAttributes註解

@Controller
@RequestMapping(value = "/session")
/*@SessionAttributes:把數據存入到session域對象中
value = "name":表示將Request域中的name值獲取並存入到Session中
types:將request中指定的數據類型存入到Session中
 */
@SessionAttributes(value= {"username","password","age"},types= {Integer.class})
public class SessionAttributesController {
    //添加Session(向session中存入值)
    @RequestMapping(path="/save")
    public String save(Model model) {
        System.out.println("把數據存入到session域對象中");
        model.addAttribute("username", "root");
        model.addAttribute("password", "666");
        model.addAttribute("age", 18);
        return "test";
    }

    //後臺查詢Session(從session中獲取值)
    @RequestMapping(path="/find")
    public String find(ModelMap modelMap) {
        String username = (String) modelMap.get("username");
        String password = (String) modelMap.get("password");
        Integer age = (Integer) modelMap.get("age");
        System.out.println(username + "   "+password +"   "+age);
        return "test";
    }

    //刪除session
    @RequestMapping(path="/delete")
    public String delete(SessionStatus status) {
        status.setComplete();
        System.out.println("已刪除session");
        return "test";
    }
}

分別依次訪問:
http://localhost:8080/session/save
http://localhost:8080/session/find
http://localhost:8080/session/delete

控制檯輸出:
在這裏插入圖片描述

8.ModelAttribute註解:用於初始化相關屬性數據

①作用在方法上,初始化相關屬性

@Controller
@RequestMapping(value = "/modelattribute")
public class ModelAttributeController {


    /**
     作用在方法上,初始化相關參數(優先執行)
     如下,先給user的level屬性賦值,再返回到add方法的入參,綁定所提交表單的值。
     */
    @ModelAttribute
    public User initUser(){
        System.out.println("ModelAttribute方法執行  初始化用戶Level");
        User user = new User();
        user.setLevel(1);
        return  user;
    }


    /*
      增加用戶   http://localhost:8080/modelattribute/add?name=張三三
      此時的user的Level已經被賦值爲1了
     */
    @RequestMapping(value = "/add")
    public String add(User user){
         System.out.println("add方法執行");
        System.out.println(user);
        return "login";
    }
 }

User

public class User {

    private String name;
    //等級
    private Integer level;
    .....
    ...
 }

訪問: http://localhost:8080/modelattribute/add?name=張三三
控制檯輸出:Level已被初始化爲1
在這裏插入圖片描述

②作用在參數上,初始化相關屬性

@Controller
@RequestMapping(value = "/modelattribute")
public class ModelAttributeController {
    //初始化數據
    @ModelAttribute
    public void initUserInfo(Map<String,User> map){
        System.out.println("ModelAttribute方法執行  初始化用戶Level");
        User user = new User();
        user.setLevel(10);
        map.put("user",user);
    }

    // @ModelAttribute:作用在參數上   http://localhost:8080/modelattribute/param/add?name=張三三
    @RequestMapping(value = "/param/add")
    public String addUser(@ModelAttribute("user")User user){
        System.out.println("addUser方法執行");
        System.out.println(user);
        return "login";
    }
}

訪問: http://localhost:8080/modelattribute/add?name=張三三
控制檯輸出:Level已被初始化爲10
在這裏插入圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章