目录
往期精彩:
1、@RequestParam
一般情况下用于get/delete请求方式,也就是参数通过query上送接到url中的方式。
@AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; boolean required() default true; String defaultValue() default
一共四个属性,其中
@AliasFor
是起别名的作用,因此name属性和value属性实际上作用相同;
name/value:用于指定参数名称;
required:默认为true,代表是否必传,当为true而参数缺失时抛出MissingServletRequestParameterException;
defaultValue:当参数为空时指定一个默认值。
示例:
@GetMapping(value = "/no-user-bank-pay") public Result<Map<?, ?>> noUserBankPay(@RequestParam(name = " bankCode ", required = false,defaultValue = "")String bankCode)){ // code… }
1.1、参数类型与是否可为空
String:可为空,当请求中存在对应字段但为undefine时为””,若不存在对应字段为null
包装类型(Integer,Long,Double,包括对应的数组等):可为空,空时为null
其他基本类型(int,long,double,Date,包括对应的数组等):不可为空,否则类型转换时抛出NullPointerException
其他类型(包括自定义实体):不可为空
1.2、name/value
实际上如果方法中参数名与请求中参数名完全一致则不需要指定name或者value,只有当方法中需要将该请求参数定义为其他名字时需要使用。
@RequestParam(name = "subSession", required =false)SubSession ss
1.3、不需要@RequestParam的情况
参数类型为String和包装类型时其实不需要使用该注解也可以获取请求中的参数。
1.4、Post请求
post请求也可以使用该注解接收参数,或者在拦截其中通过request.setAttribute()的方式存储的参数。
2、@RequestBody
一般情况下用于post/patch/put请求,也就是通过body上送的方式,参数存储于请求体中。
public @interface RequestBody { boolean required() default true; }
required:默认为true,代表是否必传
示例:
@PostMapping(value = "/cert-code") public Result<Void> sendCertificationCode(@RequestBody RequestCashierParam cashierParam)
2.1、请求参数
请求参数必须为json格式的数据
2.2、可转换类型
@RequestBody Map map
@RequestBody Object object
2.3、空值转换
在实体和Map中:
String:当请求中存在对应字段但为undefine时为””,若不存在对应字段为null
其他类型(包括包装类型和基本类型):无论是否存在对应字段,空时为null
单独的类型/数组:
包装类型空为null,基本类型不可为空
2.4、Json转换器
在springMVC中配置message-converter:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
<property name="serializationInclusion" value="NON_NULL"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
failOnEmptyBeans代表返回响应体进行转换时如果是空bean抛出异常,设置为false则不抛出,
serializationInclusion代表返回响应体序列化时的过滤条件:
ALWAYS, // 始终包含属性,即使其值为null
NON_NULL,// 仅在属性的值不为null时才包含该属性
NON_ABSENT,// 仅在JSON对象中存在该属性时才包含该属性
NON_EMPTY,// 仅在属性的值不为null且不为空时才包含该属性
NON_DEFAULT,// 仅在属性的值不是默认值时才包含该属性
CUSTOM,// 使用自定义序列化程序确定是否包含该属性
USE_DEFAULTS;// 使用默认序列化行为
3、@PathVariable
用于从请求URI中提取模板变量并将其设置为方法参数
@AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; boolean required() default true;
name/value:用于指定参数名称;
required:默认为true,代表是否必传,当为true而参数缺失时抛出MissingPathVariableException;
示例:
@GetMapping(value = "/quick-pay-bank-list/{type}") public Result<List<Map<String, Object>>> getQuickPayCooperatedBanks(@PathVariable String type)
3.1、参数类型与是否可为空
String:可为空,当请求中存在对应字段但为undefine时为””,若不存在对应字段为null
包装类型(Integer,Long,Double等):可为空,空时为null
其他基本类型(int,long,double,Date):不可为空,否则类型转换时抛出NullPointerException
如果对你有帮助,点赞、收藏、关注是我更新的动力!