转载请注明出处:

  @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可以获取的到。
  

  代码示例:

    @GetMapping("/test-sentinel-resource")
public String testSentinelResource(@RequestParam(required = false) String a) {
if (StringUtils.isBlank(a)) {
throw new IllegalArgumentException("a cannot be blank.");
}
return a;
}

  当 required = false 时,a参数为可为空,当 required= true时,a参数不可为空。

@RequestBody

  一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。

  GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。

  POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来

    解析HttpEntity中的数据,然后绑定到相应的bean上。

  就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。

  GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。

  POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用

  HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

    @PostMapping("/create/user")
public UserInfo createUser(@RequestBody CreateUserRequest request) { return userService.createUser(request);
}

总结:

  1. form-data、x-www-form-urlencoded:不可以用@RequestBody;
  2. application/json:json字符串部分可以用@RequestBody;url中的?后面参数可以用@RequestParam
  3. get请求中不能用@RequestBody注解

  

@RequestParam与@RequestBody使用对比的更多相关文章

  1. springMVC中 @RequestParam和@RequestBody的区别

    首先,不可以同时传进@RequestParam和@RequestBody,好像可以传进两个@RequestParam 如果不加@requestparam修饰,相当于 加上@requestparam且各 ...

  2. springMVC中@RequestParam和@RequestBody的作用

    @RequestParam和@RequestBody是什么区别,估计很多人还是不太清楚, 因为一般用@ RequestParam就足够传入参数了,要说他们区别,就需要知道contentType是什么? ...

  3. Spring MVC常用注解@PathVariable、@RequestHeader、@CookieValue、@RequestParam、@RequestBody、@SessionAttributes、@ModelAttribute

    简介: handler method参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A.处理requet uri部分(这里指uri template中 ...

  4. SpringBoot实战(四)获取接口请求中的参数(@PathVariable,@RequestParam,@RequestBody)

    上一篇SpringBoot实战(二)Restful风格API接口中写了一个控制器,获取了前端请求的参数,现在我们就参数的获取与校验做一个介绍: 一:获取参数 SpringBoot提供的获取参数注解包括 ...

  5. 灵活运用的@RequestParam和@RequestBody

    最近在编写项目的过程中,老出现前后端传递参数格式不一致.不统一的问题,对于一个已经快工作一年的Java程序员来说,实属不合格,所以我就下来好好研究了一下@RequestParam和@RequestBo ...

  6. post传参params与body的区别(@RequestParam和@RequestBody的区别)

    1.axios post请求  Content-Type默认为 application/x-www-form-urlencoded,我们传递参数的时,params里面的参数(简单的对象,通过 &quo ...

  7. @RequestParam、@RequestBody、@PathVariable区别和案例分析

    一.前言 @RequestParam.@RequestBody.@PathVariable都是用于在Controller层接收前端传递的数据,他们之间的使用场景不太一样,今天来介绍一下!! 二.实体类 ...

  8. springMVC中@RequestParam和@RequestBody注解的用法

    springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...

  9. @RequestParam、@RequestBody和@ModelAttribute区别

    一.@RequestParamGET和POST请求传的参数会自动转换赋值到@RequestParam 所注解的变量上1. @RequestParam(org.springframework.web.b ...

  10. @RequestParam 和@RequestBody 的区别?

    @RequestParam用来接收: 1 用来处理简单的参数绑定 2 用来接收 Content-Type 是   application/x-www-form-urlencoded (这种格 式的数据 ...

随机推荐

  1. 服务网格 Service Mesh

    什么是服务网格? 服务网格是一个软件层,用于处理应用程序中服务之间的所有通信.该层由容器化微服务组成.随着应用程序的扩展和微服务数量的增加,监控服务的性能变得越来越困难.为了管理服务之间的连接,服务网 ...

  2. 万界星空科技电子电器装配行业云MES解决方案

    电子电器装配属于劳动密集型.科技含量较高的行业,产品零部件种类繁多,生产组装困难,生产过程存在盲点,同时也决定了生产流水线多且对自动化水平要求较高. 万界星空科技提供的电子行业解决方案,从仓储管理.生 ...

  3. 编译安装openssl-1.1.1和openssh-9.4

    1.安装 openssl-1.1.1 先处理下opensll的版本,以免编译安装Openssh环境异常: yum remove openssl cd /opt wget https://www.ope ...

  4. CTFHub XSS DOM跳转 WriteUp

    前文:DOM反射XSS 进入网站,直接查看源代码,下面是关键代码,这里有xss漏洞: <script> var target = location.search.split("= ...

  5. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 15.创建持续效果BUFF

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章对应Lecture 18 – Creating Buffs, World Interaction, 71 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (52)-- 算法导论6.2 4题

    四.当i>A.heap-size/2 时,调用 MAX-HEAPIFY(A,i)会有什么结果? 文心一言: 当 i > A.heap-size/2 时,调用 MAX-HEAPIFY(A, ...

  7. 开源的代名词「GitHub 热点速览」

    当开发者谈论开源时,通常会想到 GitHub,它不仅仅是一个代码托管平台,更是一个汇聚了全球开发者的社交中心.过去,开发者发布一款软件后,都是在自己的小圈子里默默努力和交流,现在通过 GitHub 平 ...

  8. Java PDF文档转换 — PDF转Excel、SVG转PDF

    概述 Spire.PDF for Java支持将PDF文档高质量地转换为XPS.图片.SVG.Word.HTML和PDF/A格式,以及支持将XPS.HTML文档转换为PDF格式.本文将通过代码演示来介 ...

  9. 【华为云技术分享】DLI跨源|当DLI遇见MongoDB

    导语: MongoDB作为灵活高效易扩展的no-schema数据库,越来越受到互联网公司.游戏行业等开发者的青睐,但是MongoDB有着独特的语言接口,并不能很好满足数据分析师构建数据治理应用的需求, ...

  10. 华为云云原生视窗:一文回顾Q1精彩瞬间

    摘要:一文速览2023年Q1期间华为云云原生相关动态信息. 华为云云原生动态 华为云海外首发CCI Serverless容器服务 在MWC23 巴展期间,华为云海外首发CCI Serverless容器 ...