文章目录
@RequestBody——获取请求参数中的json字符串
@RequestParam——获取传入参数的值
作用:
指定参数名获取传入参数的值,如果方法参数是Map<String、String>、MultiValueMap<String、String>或HttpHeaders,则映射将填充所有头部名称和值。
参数:
//同name()方法
@AliasFor("name")
String value() default "";
//绑定到的请求参数的名称。
@AliasFor("value")
String name() default "";
//参数是否必须 默认是true,如果请求不存在该参数,则抛出异常;如果为false,如果请求不存在该参数,形参为null ,
boolean required() default true;
String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
例子
:
@RequestMapping(value = "/test")
public Object test(@RequestParam(value = "name",required = false) String name
,@RequestParam(value = "id") String id) {
return id+"-----"+name;
}
//get /test?name=sjy&id=1 输出 1-----sjy
//get /test?id=1 输出 1-----null
//get /test?name=sjy 输出 400 – 错误的请求
@PathVariable—— 获取定义在路径中的参数值
作用:
用来映射URL中的占位符到目标方法的参数中
参数:
//要绑定到的路径变量的名称。
String value() default "";
例:
@RequestMapping(value = "/test1/{id}/test1/{name}")
public Object test1(@PathVariable(value = "id") String id,
@PathVariable(value = "name") String name) {
return id+"-----"+name;
}
//请求 /test1/11/test1/211 输出 11-----211
@MatrixVariable——使用矩阵变量绑定参数
作用:
使用矩阵变量绑定参数,Spring4.0已经全面支持Matrix Variable,该注解似的开发人员能够将请求中的矩阵变量绑定到处理器的方法参数中。
Matrix Variable中,多个变量可以使用”;“(分号)分隔,
提示: 默认Spring MVC中Matrix Variable功能是关闭的,如果要开启该功能,需要在spring-mvc配置文件中添加如下设置 <mvc:annotation-driven enable-matrix-variables=“true”/> 。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启Matrix Variable功能-->
<mvc:annotation-driven enable-matrix-variables="true"/>
<context:component-scan base-package="com.sjy"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/views/"
p:suffix=".jsp"/>
</beans>
如果在spring boot 想要使用该功能需要如下配置,重写WebMvcConfigurer接口的configurePathMatch方法即可
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper=new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
例如:
/test2;id=1;name=sjy
参数:
// 同name()方法
@AliasFor("name")
String value() default "";
// 矩阵变量的名称。如果方法参数是Map<String、String>、MultiValueMap<String、String>或HttpHeaders,则映射将填充所有头部名称和值。
@AliasFor("value")
String name() default "";
//如果需要消除歧义,矩阵变量所在的URI路径变量的名称 看下面例子理解
String pathVar() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
//是否需要矩阵变量。
boolean required() default true;
例子:
@RequestMapping(value="test2/{id}/p/{name}")
public Object test2(@MatrixVariable(pathVar = "id") Map<String, String[]> id,
@MatrixVariable(pathVar = "name") Map<String, String[]> name){
return id+"-----"+name;
}
//请求 /test2/1s;a=1,2,3;b=a;c=cc/p/sjy;s=2;j=3;y=3;d=a,b,c,d
//输出响应 {a=[1, 2, 3], b=[a], c=[cc]}-----{s=[2], j=[3], y=[3], d=[a, b, c, d]}
//如果将@MatrixVariable注解中的pathVar属性去掉
//相同的请求
//输出响应 {a=[1, 2, 3], b=[a], c=[cc], s=[2], j=[3], y=[3], d=[a, b, c, d]}-----{a=[1, 2, 3], b=[a], c=[cc], s=[2], j=[3], y=[3], d=[a, b, c, d]}
//完整性测试
@RequestMapping(value = "/test3/{ownerId}/test3/{petId}", method = RequestMethod.GET)
public Object findPet(
@PathVariable(value = "ownerId") Integer ownerId ,
@PathVariable(value = "petId") Integer petId ,
@MatrixVariable(value = "q", pathVar = "ownerId") String q,
@MatrixVariable(pathVar = "ownerId") Map<String, String> matrixVars,
@MatrixVariable(pathVar = "petId") Map<String, String> petMatrixVars) {
return "ownerId: " + ownerId + "----petId:" + petId + "----q: " + q +
"----matrixVars: " + matrixVars + "---petMatrixVars: " + petMatrixVars;
}
// 请求 /test3/1;q=1,2,3;b=a;c=cc/test3/12;s=2;j=3;y=3;d=a,b,c,d
// 输出响应 ownerId: 1----petId: 12----q: 1,2,3----matrixVars: {q=[1, 2, 3], b=[a], c=[cc]}---petMatrixVars: {s=[2], j=[3], y=[3], d=[a, b, c, d]}
@RequestHeader——请求报文头的值
**作用:
**指定报文头参数名获取传入参数的值,如果方法参数是Map<String、String>、MultiValueMap<String、String>或HttpHeaders,则映射将填充所有头部名称和值。
参数:
@AliasFor("name")
String value() default "";
//要绑定到的请求头的名称
@AliasFor("value")
String name() default "";
//是否需要该参数
boolean required() default true;
例:
使用PostMan
@RequestMapping("/test4")
public Object test4(@RequestHeader Map<String, String> map){
return map.toString();
}
@CookieValue——请求中Cookie的值
与@RequestHeader同理,不过是获取的Cookie中的值。
如有不当之处,欢迎指正