1. @RequestMapping
作用:建立请求URL和处理请求方法之间的对应关系。
通过注解的元注解我们可以看出来该注解可以作用在方法上,也可以作用在类(接口)上,两者区别在于请求URL结构的不同。
注解的属性:
1.path:表示请求的URL,作用同value属性
2.value:表示请求的URL,若只使用这一个属性,可以只写请求路径
3.method:表示请求的方法,Get/Post
4.params:表示请求时URL必须携带的参数,否则不执行
5.headers(不常用):用于指定限制请求消息头的条件
使用示例:
@Controller
@RequestMapping(path = "/student")
public class HelloController {
@RequestMapping(path = "/hello")//当类上也使用了该注解时,只有收到student/hello/才会产生作用
public String sayHello(){
System.out.println("hello student");
return "studentHello";
}
}
2. @RequestParam
作用:把请求中的参数赋值给控制器中的形参
该注解只能作用在方法参数上
注解的常用属性:
1.name:作用同value
2.value:和前端传过来的Key相同,然后把Value赋值给形参
使用示例:
@Controller
@RequestMapping("anno")
public class AnnoController {
@RequestMapping("requestParam")
public String getRequestParam(@RequestParam("userName") String name){
System.out.println(name);
return "getParams";
}
}
3. @RequestBody
作用:用于获取请求体内容直接使用得到的是key=value&key=value…这样结构的数据,不适用于get请求
该注解只能作用在方法参数上
注解的常用属性:无
使用示例:
@RequestMapping("/requestBody")
public String getRequestBody(@RequestBody String body){
System.out.println(body);
return "getParams";
}
可能会出现的问题:前端传过来的中文会乱码,网上的解决办法如下,但是我修改后没有起到作用,如果路过的大哥会解决办法,还请不吝赐教。
1.在被调用的方法上的RequestMapping上加上 “produces = “application/json; charset=utf-8”
@RequestMapping(path = "/requestBody", produces = "application/json; charset=utf-8")
public String getRequestBody(@RequestBody String body){
System.out.println(body);
return "getParams";
}
2.在beans配置文件中加上如下代码
<mvc:annotation-driven conversion-service="ConversionServiceFactoryBean">
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
4. @PathVariable
作用:用于绑定URL中的占位符,例如:请求url为 /user/{id},这个{id}就是占位符
该注解作用在方法参数上
注解的常见属性
1.name:作用同value
2.value:获取占位符的Key,把Value赋值给方法形参
使用示例:
@RequestMapping("/PathVariable/{name}")
public String getPathVariable(@PathVariable("name") String name){
System.out.println(name);
return "getParams";
}
5. @ModeAttribute
作用:该注解可以作用在方法上和参数上。作用在方法上时,表示被注解的方法会先于这个controller中的所有方法执行之前执行;作用在参数上时,获取指定的数据,并赋值给形参。
作用在方法上的使用示例:
应用场景:前端提交数据时不完整,通过ModeAttribute注解的方法先讲数据补全(可能是从数据库中查询或者写一些业务代码产生新值),再把完整的数据传给前端请求的url。
@RequestMapping("/modelAttribute")
public String getModelAttribute(User user){
System.out.println(user);
return "getParams";
}
//该方法会限制性,自动补上当前时间后去请求前端真正要请求的url
@ModelAttribute
public User testModelAttribute(User user){
System.out.println("ModelAttribute方法先执行");
user.setuName(user.getuName());
user.setAge(user.getAge());
user.setBirthday(new Date());
return user;
}
作用在参数上的使用示例:
@RequestMapping("/modelAttributeParam")
public String getModelAttributeParam(@ModelAttribute User user){
System.out.println(user);
return "getParams";
}
6. SessionAttributes
用于多次执行控制器方法参数间的共享
注解的属性:
1.value:用于指定存入的属性名称
2.type用于指定存入的数据类型
使用示例:
@Controller
@RequestMapping(path = "anno")
@SessionAttributes("msg")
public class AnnoController {
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap){
String msg = (String) modelMap.get("msg");
System.out.println(msg);
return "getParams";
}
}