Spring MVC 注解

@RequestParam

作用:修饰形参参数名称

@RequestMapping("/user1")
public String testRequestParam(@RequestParam(name = "name") String username){
    return username;
}

操作方法

http://localhost:8080/user1?name=Test

@RequestBody

作用:用于获取请求体内容直接使用得到的是key=value&key=value的数据结构

@RequestMapping("/user2")
public String testRequestBody(@RequestBody String body){
	return body;
}

操作方法

http://localhost:8080/user2    [POST]
POST:
	body:"test"

@PathVaribale

作用:用于绑定url中的占位符,例如url请求中/delete/{id},这个{id}就是url占位符

@RequestMapping("/user3")
public String testPathVariable(@PathVaribale(name = "sid") String id){
    return id;
}

操作方法

http://localhost:8080/user3/10

@RequestHeader

作用:用于获取请求的消息头

@RequestMapping("/user4")
public String testRequestHeader(@RequestHeader(value = "Accept") String header){
    return header;
}

操作方法

http://localhost:8080/user4
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66

@CookieValue

作用:用于把指定的cookie名称的值传入控制器方法的参数

@RequestMapping("/user5")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue){
    return cookieValue;
}

操作方法

http://localhost:8080/user5

@ModelAttribute

作用:它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法之前执行,它可以修饰没有返回值的方法,也可以修饰具有返回值的方法。出现在参数上,获取指定的数据给参数赋值。

场景:当在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容设置为null,此时就可以使用此注解解决问题

@RequestMapping("/user6")
public String testModelAttribute(User user){
    System.out.println("testModelAttribute执行了...");
    System.out.println(user);
    return "success";
}

/**
* 该方法会先执行
*/
@ModelAttribute
public User showUser(String name){
    System.out.println("showUser执行了...");
    //通过用户查询数据库(模拟)
  	User user = new User();
    user.setName("test");
    user.setAge(20);
    user.setDate(new Date());
    return user;
}
@RequestMapping("/user7")
public String testModelAttribute(@ModelAttribute("abc") User user){
    System.out.println("testModelAttribute执行了...");
    System.out.println(user);
    return "success";
}

/**
* 该方法会先执行
*/
@ModelAttribute
public void showUser(String name,Map<String,User> map){
    System.out.println("showUser执行了...");
    //通过用户查询数据库(模拟)
  	User user = new User();
    user.setName("test");
    user.setAge(20);
    user.setDate(new Date());
    map.put("abc",user);
}

@SessionAttribute

作用:用于多次执行控制器方法间的参数共享
属性: value-属性名称,type-存入的数据类型

@Controller
@SessionAttributes(value = {"msg"}) //把msg存入到session域中
public class UserController{
	/**
	* SessionAttributes的注解
	* 
	*/
	@RequestMapping("/user8")
	public String testSessionAttribute(Model model){
    	System.out.println("testSessionAttribute...");
        model.addAttribute("msg","成功");
    	return "success";
	}
    
    /**
    * 获取session域中msg值
    */
    @RequestMapping("/user9")
	public String getSessionAttribute(ModelMap modelMap){
    	System.out.println("getSessionAttribute...");
        String msg = (String) modelMap.get("msg");
        System.out.println(msg);
    	return "success";
	}
    
    /**
    * 删除session域中全部信息
    */
    @RequestMapping("/user10")
	public String delSessionAttribute(SessionStatus status){
    	System.out.println("delSessionAttribute...");
        status.setComplete(); //执行清除
    	return "success";
	}
}
原文地址:https://www.cnblogs.com/MineLSG/p/14354224.html