简单捋捋@RequestParam 和 @RequestBody的使用

前端向后端传递参数,后端怎么去接收,就会想到 spring 的注解

之前的话,我一直用的是 RequestParam("userName") String userName 这种形式,讲道理不怎么用 RequestParam String userName

无意间该去看看这两个是有什么不同了.

  • @RequestParam
  • @RequestBody (以 json 数据的形式接收)

如果不写 @RequestParam(xxx) 注解的话,那么就前端可以有 可以没有对应的xxx名字都行

如果有xxx名,那么就会自动匹配;

如果没有,请求也能正确发送。

一、 @RequestParam

   /**
   * 用户登录
   * @param userName
   * @param password
   * @return
   */
  @RequestMapping(value = "login", method = RequestMethod.POST)
  public String login(@RequestParam String userName,
            @RequestParam String password){

  public BaseResponse login(@RequestParam("user") String userName,
               @RequestParam("psd") String password){

如果前端不传 userName 或者 password 参数名的参数就会报错

1. 用 @RequestParam 前端传过来的参数名默认为 userName 我们String后面起的参数名

如果前端不传 user 或者 psd 参数名的参数就会报错

2. 用 @RequestParam("user") @RequestParam("psd"), 给前端传递过来的参数指定参数名

错误信息

3. "message":"Required String parameter 'userName' is not present"

其实还有其他的形式

看下面

@RequestParam(value="user" required=false) 这个注解

可以通过 required = false 或者 true 来要求 @RequestParam配置的前端参数是否一定要传

required = false 表示不传的话,会给参数赋值为 null ,required = true 就是必须要有

注意:

如果@requestParam注解的参数是int类型,并且required=false,此时如果不传参数的话,会报错。原因是,required=false时,不传参数的话,会给参数赋值null,这样就会把null赋值给了int,因此会报错。

使用 Integer 包装类型的话还要需要注意空指针异常

二、@RequestBody

@RequestBody 以 字符串 的形式接收前端传过来的请求体中的 json 数据

  @RequestMapping(value = "login", method = RequestMethod.POST)
  public String login(@RequestBody String jsonStr){

@RequestBody 以 简单对象 接收前端传过来的 json 数据

  @RequestMapping(value = "login", method = RequestMethod.POST)
  public String login(@RequestBody User user){

@RequestBody以 复杂对象 接收前端传过来的 json 数据

  @RequestMapping(value = "login", method = RequestMethod.POST)
  public String login(@RequestBody Team team){

参考: 笔者JustryDeng

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springMvc注解之@ResponseBody和@RequestBody详解

    简介 springmvc对json的前后台传输做了很好封装,避免了重复编码的过程,下面来看看常用的@ResponseBody和@RequestBody注解 添加依赖 springmvc对json的处理依赖jackson <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.1

  • @ResponseBody 和 @RequestBody 注解的区别

    @ResponseBody 和 @RequestBody 注解的区别 1 前言 在详述 @ResponseBody 和 @RequestBody 注解之前,咱先了解一下 @RequestMapping 注解,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径:用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法.例如. /** * 用于类上,可以没有 */ @RequestMapping

  • 详解SpringMVC @RequestBody接收Json对象字符串

    页面提交请求参数有两种,一种是form格式提交,一种json格式提交 通常情况下我们使用的都是form格式提交的数据,数据格式:k=v&k=v,这个时候用springMVC接收参数没有问题,但有时候前端会通过json向后端传递数据,就会出现springMVC获取不到参数值的情况 注意:jQuery的$.post方法虽然也可以传递json格式数据,但实际上是用的form格式提交,jquery会帮你把json转成form格式提交后台 所以其实可以通过$.post,$.get来提交json格式,让jq

  • 详解使用@RequestBody取POST方式的json字符串

    关于@RequestBody 映射实体类的方法,网上大量讨论,不再细说. 但前端提交复杂结构,或动态性比较大的数据结构时,就可能不能映射固定类.用map方式貌似也不太灵(没有仔细研究,过程中,前端json结构比较复杂时,失败了). 前端写法: var json_data={ "name" : "demographics", "params" : [1 , 2, 3], "items" : [ {"name"

  • SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型

    SpringMvc 中@RequestParam注解使用 建议使用包装类型来代替基本数据类型 public String form2(@RequestParam(name="age") int age){ public String form2(@RequestParam(name="age") Integer age) { 上述两种方式 这种情况下使用起来基本没有差别,但是为什么要说建议使用包装类型而不是基本类型呢? 一.@RequestParam属性作用 因为当

  • 对SpringMVC的@RequestParam的解释

    自SpringMVC4.2之后,RequestParam内部有4个参数: 1.String name 2.String value 3.boolean required 4.String defaultValue 其中name和value分别是对方的别名,即二者没区别,我个人比较喜欢用name,因为它的某些特性使得name这个名字更直观,下面会说到. 先看第一个映射方法的定义: @RequestMapping("/paramTest0") public @ResponseBody St

  • @RequestBody的使用详解

    提示:建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基 本知识常识,可选择性跳过. 声明:本文是基于SpringBoot,进行的演示说明. 基础知识介绍: @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的):GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交.在后端的同一个接收方法里,@RequestBody与@Request

  • 解读@RequestBody的正确使用方法

    本文主要研究的是关于@RequestBody的正确使用方法的相关内容,具体如下. 最近在接收一个要离职同事的工作,接手的项目是用SpringBoot搭建的,其中看到了这样的写法: @RequestMapping("doThis") public String doThis(HttpServletRequest request, @RequestParam("id") Long id, // 用户ID @RequestParam("back_url"

  • Spring boot @RequestBody数据传递过程详解

    这篇文章主要介绍了Spring boot @RequestBody数据传递过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @RequestBody需要接的参数是一个string化的json @RequestBody,要读取的数据在请求体里,所以要发post请求,还要将Content-Type设置为application/json java的api 参数为JSONObject,获取到的参数处理 @PostMapping("/combine

  • 基于@RequestParam与@RequestBody使用对比

    目录 @RequestParam与@RequestBody对比 @RequestParam @RequestBody @requestBody 与@requestparam:@requestBody的加与不加的区别 一.首先说明@requestBody与@requestParam的区别 二.Content-Type 三.问题,@requestBody到底在什么时候写与不写呢 JQuery的$.ajax(url,[settings]) @RequestParam与@RequestBody对比 @R

  • 简单快速对@RequestParam声明的参数作校验操作

    目录 @RequestParam参数校验 如下所示: 接口入参验证(@RequestParam\@Valid\@Validated\@RequestBody) 今天了解了下接口入参验证问题: @RequestParam参数校验 如下所示: 第一步.在springMVC注入org.springframework.validation.beanvalidation.MethodValidationPostProcessor; 第二步.重写校验异常 第三步.在方法所在的类添加@Validated注解

  • 简单捋捋@RequestParam 和 @RequestBody的使用

    前端向后端传递参数,后端怎么去接收,就会想到 spring 的注解 之前的话,我一直用的是 RequestParam("userName") String userName 这种形式,讲道理不怎么用 RequestParam String userName 无意间该去看看这两个是有什么不同了. @RequestParam @RequestBody (以 json 数据的形式接收) 如果不写 @RequestParam(xxx) 注解的话,那么就前端可以有 可以没有对应的xxx名字都行

  • 浅谈@RequestBody和@RequestParam可以同时使用

    目录 @RequestBody和@RequestParam可以同时使用吗 自己个人实际验证结果 在postman发送如下post请求,返回正常 body中参数如下 值得注意的地方 @RequestBody和@RequestParam注解使用说明 @RequestBody作用 @RequestParam作用 @RequestBody和@RequestParam可以同时使用吗 @RequestParam和@RequestBody这两个注解是可以同时使用的. 网上有很多博客说@RequestParam

  • SpringMVC @RequestBody的使用解析

    目录 SpringMVC @RequestBody的使用 @RequestBody使用的一些注意事项 SpringMVC @RequestBody的使用 Spring mvc是一个非常轻量的mvc框架,注解可以大大减少配置,让请求的拦截变得比较简单.这次记录下@RequestBody 注解接收参数尤其是数组参数的用法. 关于容器的配置不再多说,这里写出spring-servlet.xml的sechme: <?xml version="1.0" encoding="UTF

  • 解读@RequestBody与post请求的关系

    目录 @RequestBody与post请求的关系 问题描述 问题原因 解决方法 Post请求中@RequestParam和@RequestBody混合使用 总结 @RequestBody与post请求的关系 @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的): GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交. 在后端的同一个接收方法里,@RequestBody与@Reque

  • feign post参数对象不加@RequestBody的使用说明

    目录 feign post参数对象不加@RequestBody 使用@RequestParam.@RequestBody 的正确姿势 背景 详细情况 小结一下 feign post参数对象不加@RequestBody 最近在做小程序调支付服务接口的一个功能,这个feign接口传参真的太费事. 代码我就改造了下,不直接上真实代码. 比如小程序调支付服务的订单查询接口,支付服务那边的controller的订单查询方法是: @ResponseBody @RequestMapping(value = "

  • Spring Cloud Feign实例讲解学习

    前面博文搭建了一个Eureka+Ribbon+Hystrix的框架,虽然可以基本满足服务之间的调用,但是代码看起来实在丑陋,每次客户端都要写一个restTemplate,为了让调用更美观,可读性更强,现在我们开始学习使用Feign. Feign包含了Ribbon和Hystrix,这个在实战中才慢慢体会到它的意义,所谓的包含并不是Feign的jar包包含有Ribbon和Hystrix的jar包这种物理上的包含,而是Feign的功能包含了其他两者的功能这种逻辑上的包含.简言之:Feign能干Ribb

  • python实现图书馆研习室自动预约功能

    本文为大家分享了python实现图书馆研习室自动预约的具体代码,供大家参考,具体内容如下 简介 现在好多学校为学生提供了非常良好的学习环境,通常体现在自习教室的设施设备上.对此不得不提一句的就是我们学校的图书馆,随着新图书馆的修建,馆内也设置了多个功能区,每层分为A.B.C.D四个区域,由南北连廊相连,中间由旋转楼梯贯通一至五层.A区为自修区:B区和C区为藏阅一体的社会科学和自然科学书库:D区为专项功能区,包含影视厅.数字媒体创客体验中心.智慧培训教室.云桌面电子阅览室等:B.C区东西连廊设有大

  • 使用JS获取页面上的所有标签

    最近忙的一匹,忙着大保健,都来不及写博客,今天特意抽出点时间来写一写 前两天看到一个题,是问如何从页面上获取所有的标签的并查看他们的数量,感觉还是有点意思的,所以给大家来搞一下子 我们先来捋捋思路,那要从页面上获取标签,不用说我们肯定会想到DOM操作,那获取到了之后呢,我们又不确定某个元素有没有子元素,那怎么办呢,这个时候我们肯定会想到递归啊 那现在我们有了DOM操作和递归就好办了,就可以直接写代码了,下面是代码,写了注释,大家可以拉下去参考一下 <!DOCTYPE html> <htm

随机推荐