SpringMVC之@requestBody的作用及说明

作者:云和数据张老师 时间:2022-06-08 12:35:04 

@requestBody的作用及说明

1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。

一般情况下来说常用其来处理application/json类型。

2、通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然也可以将其分别绑定到对应的字符串上。

例如说以下情况:

$.ajax({
        url:"/login",
        type:"POST",
          data:'{"userName":"admin","pwd","admin123"}',
      content-type:"application/json charset=utf-8",
          success:function(data)
             {
                alert("request success ! ");
           }
});
@requestMapping("/login")
  public void login(@requestBody String userName,@requestBody String pwd){
  System.out.println(userName+" :"+pwd);
}

这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:

String userName;
String pwd;

那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上

需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。

3、在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在特殊情况下才会使用,例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式。

作用:     

  • i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;     

  • ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

使用时机:

A) GET、POST方式提时, 根据request header Content-Type的值来判断:   

  • application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);   

  • multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);   

  • 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理); 

B) PUT方式提交时, 根据request header Content-Type的值来判断:   

  • application/x-www-form-urlencoded, 必须;   

  • multipart/form-data, 不能处理;   

  • 其他格式, 必须;

  • 说明:request的body部分的数据编码格式由header部分的Content-Type指定;

使用@RequestBody浏览器报415错误

最近在写一个前后端分离项目,前后端数据交互都使用json的格式,在使用SpringMVC的@RequestBody时,一直报415的错误,意思就是后台无法处理content-type=application/json格式的数据,我后台已经使用@RequestBody,就是不行,但是如果参数类型为String就可以接收,实体类的就是不行,看了很多教程,冲浪了一天,终于找到了解决方案。

解决方式

1。在项目中导入两个jar包

    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
 
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-core-asl</artifactId>
      <version>1.9.13</version>
    </dependency>

2.在app-servlet.xml(你的springmvc配置文件),加入一行配置 

<mvc:annotation-driven/>

或者配置一个适配器(两种方式选一个即可,我是使用的上面的方式)

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
            </list>
        </property>
    </bean>

这样就解决了415的报错。

附上我的controller层的代码。

@RestController
@CrossOrigin
public class LoginController {
    @PostMapping("/loginPost")
    public String loginPost(@RequestBody User user,@RequestHeader HttpHeaders header){
        System.out.println(header.getContentType());
        System.out.println(user.getName());
        System.out.println(user.getPassword());
        return "success";
    }
}

总结  

来源:https://blog.csdn.net/zhangchen124/article/details/104178438

标签:SpringMVC,@requestBody
0
投稿

猜你喜欢

  • SpringBoot整合WebService服务的实现代码

    2021-11-11 14:59:11
  • 关于Spring Data Jpa 自定义方法实现问题

    2023-11-28 10:08:32
  • Java数据结构及算法实例:三角数字

    2023-08-24 17:52:25
  • IDEA的Swing可视化插件JFormDesigner详解

    2023-09-23 08:02:54
  • 在IntelliJ IDEA中使用gulp的方法步骤(图文)

    2022-10-12 06:29:08
  • SpringBoot下使用MyBatis-Puls代码生成器的方法

    2023-11-25 17:07:07
  • mybatis 查询返回Map<String,Object>类型

    2023-11-14 07:06:09
  • SpringBoot返回Json对象报错(返回对象为空{})

    2022-06-30 03:31:19
  • WebSocket实现Web聊天室功能

    2023-11-27 06:10:52
  • java代码执行字符串中的逻辑运算方法

    2023-11-29 12:13:06
  • 详解Spring框架注解扫描开启之配置细节

    2022-11-01 18:04:14
  • 深入JAVA对象深度克隆的详解

    2022-01-05 14:03:13
  • Java实现经典游戏打砖块游戏的示例代码

    2021-06-25 13:30:16
  • 使用Java桥接模式打破继承束缚优雅实现多维度变化

    2023-08-23 09:00:34
  • Android为View添加拖放效果的方法实例

    2023-06-25 18:53:45
  • Java中的zookeeper常用命令详解

    2022-12-07 05:46:35
  • Spring Boot + thymeleaf 实现文件上传下载功能

    2022-05-22 03:56:13
  • Java统计字符串中字符出现次数的方法示例

    2023-11-25 08:23:02
  • Java数据结构超详细分析二叉搜索树

    2022-12-01 01:34:20
  • 分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存

    2023-06-28 02:26:55
  • asp之家 软件编程 m.aspxhome.com