#4详解@RequestParam、@RequestBody和@PathVariable

目录

1、@RequestParam

1.1、参数类型与是否可为空

1.2、name/value

1.3、不需要@RequestParam的情况

1.4、Post请求

2、@RequestBody

2.1、请求参数

2.2、可转换类型

2.3、空值转换

2.4、Json转换器

3、@PathVariable

3.1、参数类型与是否可为空



往期精彩:

#1maven打包时指定profile过滤resources的一些总结-CSDN博客文章浏览阅读737次,点赞28次,收藏23次。maven打包时指定profile过滤resources的一些总结https://blog.csdn.net/weixin_42718399/article/details/135386153?spm=1001.2014.3001.5502

#2Vite+Vue3+SpringMVC前后端分离 解决跨域问题和session每次请求不一致问题-CSDN博客文章浏览阅读1k次,点赞37次,收藏14次。Vite+Vue3+SpringMVC前后端分离通过vite/nginx解决跨域问题和session一致性问题https://blog.csdn.net/weixin_42718399/article/details/135388463?spm=1001.2014.3001.5502

#3Jenkins(Windows环境)版本升级、迁移、负载均衡、双机器同步与备份-CSDN博客文章浏览阅读985次,点赞28次,收藏17次。Jenkins(Windows环境)版本升级、迁移、负载均衡、双机器同步与备份https://blog.csdn.net/weixin_42718399/article/details/135404525?spm=1001.2014.3001.5502

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

如果对你有帮助,点赞、收藏、关注是我更新的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火鸡nobug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值