springMVC中@RequestParam和@RequestPart的区别

 更新时间:2024年06月23日 11:10:24   作者:借物小人  
本文主要介绍了springMVC中@RequestParam和@RequestPart的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

@RequestPart

  • @RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
  • 支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的

@RequestParam

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

@RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

@RequestParam可以接受简单类型的属性,也可以接受对象类型。(实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。)

知识点:在Content-Type: application/x-www-form-urlencoded的请求中,get 方式中queryString的值,和post方式中body data 的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。

区别

  • 当请求方法的请求参数类型不是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进行数据解析

前台请求:
jsonDataPerson对象的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();
}

总结

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

到此这篇关于springMVC中@RequestParam和@RequestPart的区别的文章就介绍到这了,更多相关@RequestParam和@RequestPart区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringSecurity中的EnableWebSecurity注解启用Web安全详解

    SpringSecurity中的EnableWebSecurity注解启用Web安全详解

    这篇文章主要介绍了SpringSecurity中的EnableWebSecurity注解启用Web安全详解,@EnableWebSecurity是Spring Security用于启用Web安全的注解,典型的用法是该注解用在某个Web安全配置类上,实现了接口,需要的朋友可以参考下
    2023-12-12
  • spring security认证异常后返回中文提示的问题

    spring security认证异常后返回中文提示的问题

    这篇文章主要介绍了spring security认证异常后返回中文提示的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 详解常用的Spring Bean扩展接口

    详解常用的Spring Bean扩展接口

    本篇文章主要介绍了一些常用的Spring Bean扩展接口以及它们的简单用法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • java实现图的邻接表存储结构的两种方式及实例应用详解

    java实现图的邻接表存储结构的两种方式及实例应用详解

    这篇文章主要介绍了java实现图的邻接表存储结构的两种方式及实例应用详解,邻接表构建图是必须需要一个Graph对象,也就是图对象!该对象包含属性有:顶点数、边数以及图的顶点集合,需要的朋友可以参考下
    2019-06-06
  • 解决zuulGateway网关添加路由异常熔断问题

    解决zuulGateway网关添加路由异常熔断问题

    这篇文章主要介绍了解决zuulGateway网关添加路由异常熔断问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 关于Java中增强for循环使用的注意事项

    关于Java中增强for循环使用的注意事项

    for循环语句是java循环语句中最常用的循环语句,一般用在循环次数已知的情况下使用,这篇文章主要给大家介绍了关于Java中增强for循环使用的注意事项,需要的朋友可以参考下
    2021-06-06
  • java 多态实例代码

    java 多态实例代码

    这篇文章主要介绍了java 多态实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Springboot 使用具体化类和配置来缩短单元测试时间

    Springboot 使用具体化类和配置来缩短单元测试时间

    这篇文章主要介绍了Springboot 使用具体化类和配置来缩短单元测试时间,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java实现PDF打印的解决方案

    Java实现PDF打印的解决方案

    今天小编就为大家分享一篇关于Java实现PDF打印的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 浅谈Java多进程程序的运行模式

    浅谈Java多进程程序的运行模式

    这篇文章主要介绍了浅谈Java多进程程序的运行模式,包括对进程阻塞问题的讨论等,需要的朋友可以参考下
    2015-11-11

最新评论