SpringMVC之@RequestBody

关于SpringMvc中的@RequestBody和@RequestParam到底有什么用 缘起 在此之前,我一直搞不清楚@RequestBody和@RequestParam到底有什么作用,在很多时候我发现即使我在controller中设置@RequestBody和@RequestParam或者不设置这些,依然能够接收到请求参数,但在某些情况下他们又行不通。所以本文旨在深入讲解我们到底在什么情况下使用@RequestBody和@RequestParam,什么情况下不能使用@Request... 阅读详情

@RequestBody

因为一直觉得传简单对象直接不用注解也可以自动组装,就以为Spring可以为我们组装所有类型的对象。但今天测试过,原来象Map,List或复合对象都必需使用这个注解才可以正确组装,以下是我的测试代码:

首先写个测试的Controller:

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.cunframework.core.common.controller.BaseController;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;

class A{
    private String name;
    private String value;
    public String getName() {
        return name;
    }
    public String getValue() {
        return value;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setValue(String value) {
        this.value = value;
    }
}

class B{
    private List<A> a;
    private String count;

    public List<A> getA() {
        return a;
    }
    public String getCount() {
        return count;
    }
    public void setA(List<A> a) {
        this.a = a;
    }
    public void setCount(String count) {
        this.count = count;
    }
}

@Scope("prototype")
@Controller
@RequestMapping("/rb")

public class RequestBodyController extends BaseController{

    @RequestMapping(value = "test1")
    @ResponseBody
    public Map test1(A a,HttpServletResponse response) {

        try {
            System.out.println(JSON.toJSONString(a));
            return toSuccess();
        } catch (Exception e) {
            e.printStackTrace();
            return toError();
        }
    }

    @RequestMapping(value = "test2")
    @ResponseBody
    public Map test2(List<A> a,HttpServletResponse response) {
        try {
            System.out.println(JSON.toJSONString(a));
            return toSuccess();
        } catch (Exception e) {
            e.printStackTrace();
            return toError();
        }
    }

    @RequestMapping(value = "test3")
    @ResponseBody
    public Map test3(@RequestBody List<A> a,HttpServletResponse response) {
        try {
            System.out.println(JSON.toJSONString(a));
            return toSuccess();
        } catch (Exception e) {
            e.printStackTrace();
            return toError();
        }
    }

    @RequestMapping(value = "test4")
    @ResponseBody
    public Map test4(B b,HttpServletResponse response) {
        try {
            System.out.println(JSON.toJSONString(b));
            return toSuccess();
        } catch (Exception e) {
            e.printStackTrace();
            return toError();
        }
    }

    @RequestMapping(value = "test5")
    @ResponseBody
    public Map test5(@RequestBody B b,HttpServletResponse response) {
        try {
            System.out.println(JSON.toJSONString(b));
            return toSuccess();
        } catch (Exception e) {
            e.printStackTrace();
            return toError();
        }
    }
}

测试用的html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
    <script>

        function ajax(url,data,contentType){
            $.ajax({
                type: "POST",
                contentType: contentType,
                url: url,
                data: data,
                success: function(data){
                    console.log(data);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    alert("Error Occured!");
                }
            });
        }

        function test1(){
            var data = {
                name:123,
                value:456
            };
            ajax(
                "http://localhost:8080/orcs/rb/test1.do",
                data,
                "application/x-www-form-urlencoded"
            )
        }

        function test2(){
            var data = [
                {
                    name:123,
                    value:456
                },
                {
                    name:222,
                    value:222
                },
                {
                    name:333,
                    value:444456
                }
            ];

            ajax(
                "http://localhost:8080/orcs/rb/test2.do",
                data,
                "application/x-www-form-urlencoded"
            );
        }

        function test3(){
            var data = [
                {
                    name:123,
                    value:456
                },
                {
                    name:222,
                    value:222
                },
                {
                    name:333,
                    value:444456
                }
            ];

            ajax(
                "http://localhost:8080/orcs/rb/test3.do",
                JSON.stringify(data),
                "application/json"
            );
        }

        function test4(){
            var data = {
                a:[{
                    name:123,
                    value:456
                },
                {
                    name:222,
                    value:222
                },
                {
                    name:333,
                    value:444456
                }],
                count:222
            }

            ajax(
                "http://localhost:8080/orcs/rb/test4.do",
                data,
                "application/x-www-form-urlencoded"
            );
        }

        function test5(){
            var data = {
                a:[{
                    name:123,
                    value:456
                },
                {
                    name:222,
                    value:222
                },
                {
                    name:333,
                    value:444456
                }],
                count:222
            };

            ajax(
                "http://localhost:8080/orcs/rb/test5.do",
                JSON.stringify(data),
                "application/json"
            );
        }
    </script>
</head>
<body>
    <button onclick="test1()">btn1</button>
    <button onclick="test2()">btn2</button>
    <button onclick="test3()">btn3</button>
    <button onclick="test4()">btn4</button>
    <button onclick="test5()">btn5</button>
</body>
</html>

发现@RequestBody这个注解,使用时对ajax有些要求:

  • 数据必需要用JSON.stringify(data)处理
  • contentType类型必需为application/json

而不加这个,注解组装简单对象时,则:

  • 数据直接用json,不必处理
  • contentType类型默认为application/x-www-form-urlencoded即可

转载自《Spring MVC 解决跨域问题&以及对@RequestBody的理解》

SpringMVC注解之@RequestBody、@ResponseBody @ReponseBody与@RequestBody 首先提一嘴关于@RequestMapping (“url”),可用于类或方法上,方法上作用 是处理请求地址的相关映射。类上作用是所有响应请求的方法都是以该地址作为父路径。 @ReponseBody @ReponseBody注解用于将Controller的方法 的返回的对象(Java对象),通过Spring提供的HttpMessageCo... 阅读详情

相关推荐

HMC7044芯片模拟SPI配置

摘要: HMC7044是一款高性能双环路整数N分频抖动衰减器,支持SPI接口配置,适用于高速数据转换器时钟系统。该芯片采用双PLL级联架构,具有14路可配置输出,可满足GSM/LTE基站设计需求。SPI接口采用3线模式(SLEN/SCLK/SDATA),支持24位寄存器读写(13位地址+8位数据)。驱动实现基于Zynq EMIO模拟SPI,提供初始化、数据传输及寄存器配置功能,支持三线制工作模式和多种时钟参数设置。

toonyhe的博客 1094

SpringMVC@RequestBody用法个人总结

SpringMVC使用Ajax技术和后端交互数据 分两种情况, 一种是以get请求发送数据,没有请求体,以Key-Value的形式匹配属性 @ResonseBody表示返回的是响应数据,不让视图解析器解析 第二种post请求发送,数据封装到请求体中,也是能直接以Key-Value形式匹配属性 post请求发送数据还有另一种格式,发送json格式的字符串,后端以@RequstBody注解解析...

Weleness的博客 4810

Bode图、ABCD矩阵与EET结合:三步搞定复杂电路传递函数分析

在模拟电路与电源控制设计中,传递函数和频率响应是衡量系统稳定性的核心指标。Bode图以直观的幅频/相频曲线揭示带宽与相位裕度,ABCD二端口矩阵可将级联网络结构化表达,而EET额外元素定理则针对寄生电容、负载效应等局部修正提供显式公式。三者互补,组合成一套从整体拓扑到局部寄生修正的完整分析方法:先用ABCD搭建主体网络,再用EET快速加入额外元件,最后用Bode图验证传递函数和稳定裕度。该方法适用于滤波器设计、电源环路补偿、运放稳定性分析等线性小信号场景,支持Python/SciPy和SPICE交叉验证,显

weixin_32496547的博客 362

@RequestBody 接收数组、List 参数、@Deprecated 标记废弃方法

目录 @RequestBody 概述 接收单个 String 参数 接收 字符串数组 参数 接收 List<Map<String,Object> 参数 接收整形数组 接收单个 POJO 对象 接收 POJO List 参数 @RequestBody 概述 1、@RequestBody 主要用来接收前端传递给后端的 json 格式的数据的(请求体中的数据的) 2、...

蚩尤后裔-汪茂雄 12万+

GoPro官方API实战:从蓝牙配对到Wi-Fi流媒体,构建跨平台控制应用

本文详细解析了GoPro官方API的开发实践,涵盖蓝牙配对、Wi-Fi流媒体控制等关键技术。通过实战案例,指导开发者如何构建跨平台控制应用,解决设备发现、指令解析、视频流传输等核心问题,并分享Android平台迁移经验与常见问题排查方法。

weixin_30727835的博客 397

Jetson Nano之CSI摄像头操作方法

jetson端csi摄像头的应用方法

ZONGXP的博客 1万+

postman 测试 Array、List、Map 入参 API 正确姿势

一 Array 1.1 spring 以 @RequestParam 解析简单数组 @RequestMapping(value = "/getByIds" ,method = RequestMethod.POST) public RetDTO getByIds(@RequestParam(value = "ids") Long[] ids){ return RetDTO.getReturnJson(userService.getByIds(ids)); } postman 请求方式一...

javaTalk 3836

【高级雷达感知与学习】 第十三章 可解释性与物理–感知融合(Physics-Informed ML)

本文提出了一种面向雷达感知的物理约束学习方法,将雷达物理先验(RCS、SNR、距离衰减)嵌入神经网络,解决纯数据驱动模型的样本效率低、泛化能力弱和决策不可信问题。通过三种融合范式(混合建模、物理正则化、PINNs)实现机理与数据协同建模,并设计了物理引导显著图解决雷达可解释性语义错位问题。实验表明,物理约束可提升40%样本效率,增强低信噪比场景鲁棒性。代码实现包含物理正则化损失、可解释性分析和消融实验,为雷达感知系统提供了可迁移的工程范本。

VectorShift的博客 185

【关于Spring MVC框架中的@RequestBody】

在Spring MVC框架中,可以在POJO类型的请求参数前添加。当服务器端接收请求参数时,使用了注解,客户端提交的请求参数必须是对象格式的!如果客户端提交的请求参数不是对象格式的,当提交请求后,客户端会收到响应码的错误,并且,会在服务器端控制台提示如下错误: 当服务器端接收请求参数时,没有使用注解,客户端提交的请求参数必须是FormData格式的!如果客户端提交的请求参数是对象格式的,则服务器端接收到的各请求参数值均是

居然天上楼的博客 660

Qt QCustomPlot 图形库详解及使用

QCustomPlot 是一个开源的 Qt C++ 库,专门用于创建数据图表。易于集成到 Qt 项目中。支持多种图表类型,如折线图、散点图、条形图等。提供丰富的交互功能,如缩放、平移、选择和拖动。高度可定制,支持图形的各种样式设置。// 添加第一条曲线i < 101;++i) {// 设置曲线颜色// 添加第二条曲线i < 101;++i) {// 设置曲线颜色// 设置散点样式// 添加图例。

MusicScore的博客 764

提高RFID检测距离以及检测速度的方法总结

摘要:提高RFID检测距离需优化阅读器功率、标签灵敏度、天线设计及频段选择,同时减少环境干扰;提升检测速度则需改进防碰撞算法、增强并行处理能力、精简数据传输。实际应用需平衡两者关系,如物流仓储采用UHF频段、高增益天线和动态Q算法实现远距离高速读取,ETC系统则通过微波频段和高速调制实现超远距离快速识别。不同场景需针对性优化硬件配置和系统参数。

start_up_go的博客 292

使用多个@RequestBody接收参数

原因:常规情况下,因为request的body只能读取一次,@RequestBody也只能解析一次,这就导致解析第二个的@RequestBody的时候stream已经关闭了,无法再次读取。话不多说,上货: 解决办法:两个类,直接copy即可。 import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import ja

Good Luck 9万+

ABAP 平台下配置 OAuth 2.0 Authorization Code 授权类型的完整指引

本文是面向ABAP管理员和SAP开发者的OAuth 2.0授权码配置实战指南。文章详细介绍了在ABAP平台启用Authorization Code的完整流程,包括前置条件检查(如TLS配置和系统用户准备)、SOAUTH2事务码中各字段配置要点(授权类型启用、Redirect URI设置、授权码有效期等)、Scope分配规则以及验证方法。通过一个销售订单OData接口的实际案例,说明了如何将抽象规范转化为具体配置。最后提供了多种验证方式(事务码测试、端点测试和Postman测试)以及关键配置参数(如授权码有效

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 296

SpringMVC @RequestBody使用

Spring mvc是一个非常轻量的mvc框架,注解可以大大减少配置,让请求的拦截变得比较简单。这次记录下@RequestBody 注解接收参数尤其是数组参数的用法。 关于容器的配置不再多说,这里写出spring-servlet.xml的sechme:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;beans xmlns=&quot;http://ww

超威半导体 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

springmvc中@requestbody注解

今天做项目用到了@requestbody注解 代码: @PostMapping("/findList") public List<Brand> findList(@RequestBody Map searchMap){ return brandService.findList(searchMap); } 于是记录一下springmvc中@request...

Angela_L的博客 1715

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

springmvc @requestbody_SpringMvc

1、Springmvc的运行原理①.客户端请求提交web.xml中,然后找到springmvc核心控制类DispatcherServlet②.由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller③. DispatcherServlet将请求提交到Controller④. Controller调用业务逻辑处理后,返回...

weixin_39633165的博客 635

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

springmvc 的@RequestBody的使用

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

qq_38422016的博客 394

SpringMVC-@RequestBody注解

处理HttpEntity传递过来的数据,一般用来将JSON格式的字符串直接转为对象 在GET请求中,因为没有HttpEntity,不能使用@RequestBody。 在POST请求,可以使用@RequestBody和@RequestParam,如果使用@RequestBody,对于参数转化的配置必须统一。 @RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessa...

好记性不如烂笔头 1085

SpringMVC的@ResponseBody与@RequestBody

内容参考自https://my.oschina.net/lichhao/blog/172562 在SpringMVC中,可以使用@RequestBody与@ResponseBody完成报文到对象、对象到报文的转换。这就是依靠Spring3.0引入的消息转换器机制实现的: HttpMessageConverter /** * Strategy interface that specifies a converter that can convert from and to HTTP requests

吃一口瓜 的博客 2309

SpringMVC之@requestBody的作用

 1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。   2、通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然也可以...

张晨光老师的播客 2333

SpringMVC中@RequestBody的应用

一个比较复杂的数据结构在前台组合起来后传递到后台,之前所有的前后台转换都是自己写的,比如js将json转为字符串的方法,后台接收json转成实体的方法。使用SpringMVC之后,可以使用@RequestBody注释接受参数,具体使用如下:        首先,@RequestBody需要接的参数是一个String化的json,这里直接使用JSON.stringify(json)这个方法来转

零度的博客专栏 8598

SpringMVC @RequestBody和@ResponseBody原理解析

SpringMVC @RequestBody和@ResponseBody原理解析 前言 @RequestBody作用是将http请求解析为对应的对象。例如: http请求的参数(application/json格式): { "accountId": 10, "adGroupId": "12345678", "campaignId": "12345678", "dataType": 0, "sign": "abcdefg", "site": "us", "timeStamp": 1

qq_43842093的博客 3367

SpringMVC @RequestBody 参数映射不上,@RequestBody 报错

最近代码遇见了一个springmvc中的小问题,算是很基础的东西,同事问我后我有有些迷惑上网找了一些资料后弄清楚了。特此记录一下springmvc注解@requestbody来传递参数映射一个对象。 言归正传问题是这样的: 使用postMan 发送httppost 请求: 最后报错。   报错原因: 在使用postMan发送post请求的时候没有选择如下:     也就是...

liuzhenteng521的博客 2万+

springMVC中@RequestParam和@RequestBody的区别

本文使用postman来测试springMVC的@RequestParam和@RequestBody注解的区别。 测试数据为: @RequestBody @RequestMapping("test") @ResponseBody public User test(@RequestBody User user) { return user; } @RequestBody的作用: @RequestBody可以接收POST请求的消息体中的json格式的数据,它会使用MappingJackson2Ht

xiangxiaotian666的博客 817

SpringMVC的@RequestBody

方法参数带有@RequestBody注解,表明**请求体中的内容(**JSON或XML)应该被转换成方法的参数类型对象,并绑定到该对象。如果没有它,SpringMVC将会认为希望将请求参数(要么是查询参数,要么书表单参数)绑定到方法的参数上。

qq_40461706的博客 149

springMVC中@requestBody问题

近来没事帮同学做一个毕业设计用SpringMVC,项目开发一直有用但是没有自己从开始进行搭建,在使用@Request中出现了很多的问题 @RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。@ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输

朱伟的专栏 901
上一篇: Spring解决跨域问题(@CrossOrigin)
下一篇: Jpress之快速搭建个人博客
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值