Java Spring注解二:参数请求@RequestParam和@RequestBody

14 篇文章 0 订阅

作为一名crud boy,关于web请求,接口处理基本是家常便饭,涉及到这些中间肯定少不了请求参数。毕竟要根据请求参数才能进行相应的操作,返回预想的结果。

一般来说我们web请求参数是不能直接通过http请求来代码识别的,所以你必须要通过注解来告诉代码“不要傻等着参数像之前那样,方法间参数传递那样直接获取,作为一个成熟的web请求代码,要自己去http请求里找参数”

这里用到的注解可以是@RequestParam也可以是@RequestBody,分情况来选择。但是你不用的话,那你最后得到参数可能永远都是null。

一,@RequestParam和@RequestBody有啥区别

首先使用上,RequestParam对应的参数请求类型content-type一般是application/x-www-form-urlencoded或者multipart/form-data

这里的content-type你可以理解为媒体类型,x-www-form-urlencoded意思就是标准编码格式
multipart/form-data对应的是类似提交组件对应的,一般来说上传下载文件什么的经常会用到

想看你的请求的content-type可以尝试用postman这个工具来查看
比如我看一个下载文件的接口
在这里插入图片描述
看他的请求content-type要去头文件去看,注意打开hearder里面的hidden按钮
在这里插入图片描述
同理@RequestBody对应的是就是处理的请求类型不是application/x-www-form-urlencoded或者multipart/form-data,比如处理application/json、application/xml等类型的数据。

二,那些情况使用@RequestParam那些情况用@RequestBody
一般来说我们经常用的一般是@RequestBody,因为我们大多数请求都是application/json,好处有很多,结构化易理解,跟前者相比他可以批量化,可以通过json传多个对象信息过去。
,但是有的时候我们碍于一些原因,也会用到@RequestParam,比如文件的上传和下载,向我们spring中专门有个支持的类MultipartFile来支持这种请求。

总而言之,要看请求的类型来处理,比如json格式的@RequestParam可能无法处理,同理直接给一个MultipartFile 的file文件@RequestBody也无能为力。

二,实际代码中如何使用@RequestBody和@RequestParam
光知道什么情况来用还不行,最后还要落实到代码上
都是在对应的请求参数旁边加上,一般就是搭配@RequestMapping出现

@RequestBody的示例

    @RequestMapping(value = "/querySumAsset", method = RequestMethod.POST)
    public Result<TotalAssetResponse> querySumAsset(@RequestBody AssetSumParam assetSumParam) throws Exception {
        return dataReportService.querySumAsset(assetSumParam);
    }

@RequestParam也差不多,只不过他多了一步,就是注明参数名称

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public Result<List<Long>> upload(@RequestParam("file") MultipartFile[] files) throws Exception {
        if (files.length == 0) {
            throw  new BusinessException(ErrorCode.FAIL);
        }
        return imageService.uploadImage(files);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值