SpringMVC常用注解

文章目录

    • 常用注解
      • 1.RequestMapping注解:建立请求URL和处理方法之间的对应关系
      • 2.RequestParam注解:把请求中的指定名称的参数传递给控制器中的形参赋值
      • 3.RequestBody注解:获取请求体的内容,参数拼接成一个字符串
      • 4.PathVariable注解:绑定url中的占位符
      • 5.RequestHeader注解:获取指定请求头的值
      • 6.CookieValue注解:获取指定cookie的名称的值
      • 7.SessionAttributes注解:用于多次执行控制器方法间的参数共享(全局Session设置)
        • ①Model(模型信息)的使用
        • ②SessionAttributes注解
      • 8.ModelAttribute注解:用于初始化相关属性数据
        • ①作用在方法上,初始化相关属性
        • ②作用在参数上,初始化相关属性


回顾: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注解:获取请求体的内容,参数拼接成一个字符串

SpringMVC常用注解_第1张图片在这里插入图片描述在这里插入图片描述

@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工具测试体现:请求路径一样,可以根据不同的请求方式执行后台的不同方法
SpringMVC常用注解_第2张图片
DELETE 方式,执行delete方法SpringMVC常用注解_第3张图片
GET方式,执行getById方法
SpringMVC常用注解_第4张图片

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的名称的值

SpringMVC常用注解_第5张图片

@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>Titletitle>
head>
<body>
<h3>你已入门啦h3>
<div>
    ${name}
div>
body>
html>

SpringMVC常用注解_第6张图片

②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
SpringMVC常用注解_第7张图片

②作用在参数上,初始化相关属性

@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
SpringMVC常用注解_第8张图片


你可能感兴趣的:(#,SpringMVC)