@RequestParam和@RequestPart的区别

目录

1.说明

2.区别

3.总结


1.说明

@RequestPart

@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。

支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的

@RequestParam

@RequestParam支持’application/json’,也同样支持multipart/form-data请求

2.区别

当请求方法的请求参数类型不是String 或 MultipartFile / Part时,而是复杂的请求域时,@RequestParam 依赖Converter or PropertyEditor进行数据解析, RequestPart参考 ‘Content-Type’ header,依赖HttpMessageConverters 进行数据解析

当请求为multipart/form-data时,@RequestParam只能接收String类型的name-value值,@RequestPart可以接收复杂的请求域(像json、xml);@RequestParam 依赖Converter or PropertyEditor进行数据解析, @RequestPart参考'Content-Type' header,依赖HttpMessageConverters进行数据解析

前台请求:

jsonData为Person对象的json字符串

uploadFile为上传的图片

后台接收:

@RequestPart可以将jsonDatajson数据转换为Person对象

@RequestMapping("jsonDataAndUploadFile")
@ResponseBody
public String jsonDataAndUploadFile(@RequestPart("uploadFile") MultiPartFile uploadFile,
                                    @RequestPart("jsonData") Person person) {
    StringBuilder sb = new StringBuilder();
    sb.append(uploadFile.getOriginalFilename()).append(";;;"));
    return person.toString() + ":::" + sb.toString();
}

@RequestParam对于jsonDatajson数据只能用String字符串来接收

@RequestMapping("jsonDataAndUploadFile")
@ResponseBody
public String jsonDataAndUploadFile(@RequestPart("uploadFile") MultiPartFile uploadFile,
                                    @RequestParam("josnData") String jsonData) {
    StringBuilder sb = new StringBuilder();
    sb.append(uploadFile.getOriginalFilename()).append(";;;"));
    return person.toString() + ":::" + sb.toString();
}

3.总结

当请求头中指定Content-Type:multipart/form-data时,传递的json参数,@RequestPart注解可以用对象来接收,@RequestParam只能用字符串接收

参照

feign 支持多 @RequestPart 同时发送 MultipartFile 和复杂对象_feign @requestpart_楚洛瞬的博客-CSDN博客

@RequestParam和@RequestPart的区别_借物小人的博客-CSDN博客_@requestpart

你可能感兴趣的:(java常用,json,java,开发语言)