1.@RequestParam
作用:把请求中指定名称的参数给控制器中的形参赋值
属性:
value:请求参数中的名称
required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供报错
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--常用的注解-->
<!--@RequestParam-->
<a href="anno/testRequestParam?username=飞扬">RequestParam</a>
</body>
</html>
package com.fy.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/anno")
public class annoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name="username") String name){
System.out.println("执行了");
System.out.println(name);
return "success";
}
}
2.@RequestBody
作用:用于获取请求体内容,直接使用得到是key=value&key=value 结构数据。(get不适用)
属性:required:是否必须有请求,默认是true,当取值是true时,get请求方式会报错,如果取值为false,get请求得到是null。
/**
* 获取到请求的内容
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println("执行了");
System.out.println(body);
return "success";
}
<!--@RequestBody-->
<form action="anno/testRequestBody" method="post">
姓名:<input type="text" name="name"/>
年龄:<input type="text" name="age"/>
<input type="submit" value="提交"/>
</form>
如果出现中文乱码:
String encode = URLDecoder.decode(body,"utf-8");
可以解决中问乱码问题
3.@PathVariable
作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
属性:value:指定url中的占位符名称
Restful风格的url优点:结构清晰、符合标准、易于理解、扩展方便
<!--@PathVariable-->
<a href="anno/testPathVariable/10">PathVariable</a>
<br/>
/**
* PathVariable注解
* @return
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable(name = "id") String id){
System.out.println("执行了");
System.out.println(id);
return "success";
}
4.@RequestHeader
作用:用于获取请求消息头
属性:value:提供消息头名称
required:是否必须有此消息头
/**
* RequestHead注解
* @return
*/
@RequestMapping("/testRequestHead")
public String testRequestHead(@RequestHeader(name = "accept") String header){
System.out.println("执行了");
System.out.println(header);
return "success";
}
<!--@RequestHead-->
<a href="anno/testRequestHead">RequestHead</a>
<br/>
5.@CookieValue
作用:用于把指定cookie名称的值传入控制器方法参数
属性: value:指定cookie的名称
required:是否必须有此cookie
<!--@CookieValue-->
<a href="anno/testCookieValue">CookieValue</a>
<br/>
/**
* CookieValue
* @return
*/
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(name = "JSESSIONID") String cookieValue){
System.out.println("执行了");
System.out.println(cookieValue);
return "success";
}
6.@ModelAttribute
作用:用于修饰方法和参数
在方法上。表示当前方法会在控制器的方法执行之前,先执行。他可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
在参数上,获取指定的数据给参数赋值
属性:value:用于获取数据的key。
方法上
<!--@ModelAttribute-->
<form action="anno/testModelAttribute" method="post">
姓名:<input type="text" name="name"/>
年龄:<input type="text" name="age"/>
<input type="submit" value="提交"/>
</form>
<br/>
/**
* ModelAttribute
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(){
System.out.println("执行了");
return "success";
}
@ModelAttribute
public void showUser(){
System.out.println("showUser执行了");
}
在参数上
<!--@ModelAttribute-->
<form action="anno/testModelAttribute" method="post">
姓名:<input type="text" name="name"/>
年龄:<input type="text" name="age"/>
<input type="submit" value="提交"/>
</form>
<br/>
/**
* ModelAttribute
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("执行了");
System.out.println(user);
return "success";
}
@ModelAttribute
public User showUser(String name){
System.out.println("showUser执行了");
//模拟用户查找数据库
User user=new User();
user.setName(name);
user.setAge(20);
user.setDate(new Date());
return user;
}
/**
* ModelAttribute
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("aaa") User user){
System.out.println("执行了");
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(name);
user.setAge(20);
user.setDate(new Date());
map.put("aaa",user);
}
<!--@ModelAttribute-->
<form action="anno/testModelAttribute" method="post">
姓名:<input type="text" name="name"/>
年龄:<input type="text" name="age"/>
<input type="submit" value="提交"/>
</form>
<br/>
7.@SessionAttribute
作用:用于多次执行控制器方法间的参数共享
属性:
value:用于指定存入的属性名称
type:用于指定存入的数据类型
<!--@SessionAttribute-->
<a href="anno/testSessionAttributes">SessionAttribute</a>
<br/>
/**
* SessionAttributes
* @return
*/
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){
System.out.println("执行了");
model.addAttribute("fy","飞扬");
return "success";
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>👅🐕🕸</title>
</head>
<body>
<h3>入门成功</h3>
${sessionScope}
</body>
</html>
<a href="anno/getSessionAttributes">getSessionAttributes</a>
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap){
System.out.println("执行了");
String fy = (String) modelMap.get("fy");
System.out.println(fy);
return "success";
}
掌握好注解对后面编写代码很有帮助。