快速解决SpringMVC @RequestBody 用map接收请求参数的问题

一:遇到个跨域调用,因为传个我的参数不定,所以需要通过map来接收参数并进行签名验证等操作

理所当然的写出了下面的代码,但是发现map里并没有获取到传来的key-value值

@RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
@ResponseBody
public String callback(@RequestBody Map<String, String> params) {
 return null;
} 

之后我发现HttpServletRequest有一个getParameterMap方法好像很牛逼的样子

@RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
@ResponseBody
public String callback(HttpServletRequest httpServletRequest) {
 Map<String, String> params = httpServletRequest.getParameterMap();
 return null;
} 

然而这么写还是不对,因为这个方法其实是返回的一个Map<String, String[]>对象,而不是我想象中的简单的Map<String, String>类型,这里是可以获得正确的参数的,但是需要手动进行转换,不可能是这种情况呀,一定有更好的解决办法 “用@RequestParam试试”,然后就对了。。对了。。了。。

@RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
@ResponseBody
public String callback(@RequestParam Map<String, String> params) {
 return null;
} 

二:以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。

同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.

JavaScript 代码:

<script type="text/javascript">
 $(document).ready(function(){
 var saveDataAry=[];
 var data1={"userName":"test","address":"gz"};
 var data2={"userName":"ququ","address":"gr"};
 saveDataAry.push(data1);
 saveDataAry.push(data2);
 $.ajax({
  type:"POST",
  url:"user/saveUser",
  dataType:"json",
  contentType:"application/json",
  data:JSON.stringify(saveData),
  success:function(data){ 

  }
  });
 });
</script>

Java代码

@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
 userService.batchSave(users);
 }

以上这篇快速解决SpringMVC @RequestBody 用map接收请求参数的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题

    新配置一个spring的MVC项目,发现对Get请求的中文参数出现了乱码: 查看了SpingMVC中关于编码的配置(在web.xml中),如下: <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param>

  • Spring MVC文件上传大小和类型限制以及超大文件上传bug问题

    在上一篇文章中,主要介绍了Spirng MVC环境下的正常情况下文件上传功能实现.在实际开发的时候,还会涉及到上传文件大小和类型的限制,接下来就会对Spirng MVC环境下文件上传大小和类型的限制进行介绍,还会讲解到文件上传大小tomcat服务器bug问题及解决方案. 一.文件上传大小限制 这里还是接着上篇文章先介绍Spring MVC下的文件上传大小限制,文件上传大小的限制在springmvc-config.xml中配置文件解析器CommonsMultipartResolver时即可配置,示

  • SPRINGMVC 406问题解决方案

    这篇文章主要介绍了SPRINGMVC 406问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题 HTTP-406 错误,Spring MVC + JSON = 406 Not Acceptable 解答 1.classpath下是没有加入jackson的maven依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifa

  • 详解SpringMVC注解@initbinder解决类型转换问题

    在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题. 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作. WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的

  • 解决SpringMVC接收不到ajaxPOST参数的问题

    问题 今天遇到一个问题,代码如下 java: @PostMapping(value = "/method") @ResponseBody public Object method(Integer id,String audit_content) { return null; } js: var data = {id:7,audit_content:"11111111111111111111a1"}; $.ajax({ type: "POST",

  • 解决SpringMVC同时接收Json和Restful时Request里有Map的问题

    现在正在做的项目要将旧系统实现微服务,用 SpringBoot 来做,有时候同一个 Request 就要同时接收来自 ajax 的 Json 数据和 Restful 的数据,如果里面还包含 Map 怎么办呢? 最近就只想出了这种办法,仅供参考.如有错误请指正,谢谢. 代码 Json 数据 { "fieldMap": { "middleName": "1", "mailingAddress": "2", &q

  • 解决SpringMvc后台接收json数据中文乱码问题的几种方法

    1.使用ajax从前台页面传输数据到后台controller控制器的时候,出现中文乱码(问号???). 之前在网上找了各种解决方案,都行不通,最后发现是tomcat服务器接收数据的问题 解决方案: 方式一:在controller接收参数时,对参数进行转码 @ResponseBody @RequestMapping(value="/getJsonDataByCityName",produces="application/json") public String get

  • 快速解决SpringMVC @RequestBody 用map接收请求参数的问题

    一:遇到个跨域调用,因为传个我的参数不定,所以需要通过map来接收参数并进行签名验证等操作 理所当然的写出了下面的代码,但是发现map里并没有获取到传来的key-value值 @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8") @ResponseBody public String callback(@RequestBody Map<String, String&

  • 详解SpringMVC——接收请求参数和页面传参

    spring接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(HttpServletRequest request){ String name = request.getParameter("name") String pass = request.getParameter("pass") } 2,Spring会自动将表单参数注入到方

  • springmvc如何使用map接收参数

    目录 springmvc 使用map接收参数 第一种情况:请求参数有多组 第二种情况:所有的参数不分组 用map接收参数的几个注意的问题 1.接受map的参数不能写value 2.对于多个同名字段 springmvc 使用map接收参数 开发过程中有时候我们并不知道前端都会传递哪些参数给到后端. 为方便扩展接口功能, 在请求参数不改变的情况下兼容前端新增的入参的需求, 我们会考虑使用map接受参数. 这样无论前端加减参数, controller的入参是不需要变动的. 第一种情况:请求参数有多组

  • SpringMvc自动装箱及GET请求参数原理解析

    在我的概念里边,GET请求需要加上注解@RequestParam,然后它的参数类型只能是 基本数据类型 或者 基本数据类型的包装类,比如:@RequestParam String name(默认是必传的),也可以不加@RequestParam 注解,其实就相当于@RequestParam(required = false) 但是参数类型竟然是自定义对象,对象类里有不同的参数和get/set方法,而且没有使用@RequestParam 注解,那么同样也能实现GET请求 比如一个请求方法是:publ

  • 使用SpringMVC 重写、扩展HttpServletRequest请求参数

    一.背景说明 由于在项目进行前后端分离改造时,请求由多种传参方式统一定义为JSON格式传输,在改造过程中需要前后版本兼容.如果能在Controller接收参数之前将JSON格式参数进行解析成原有参数,对Request请求参数进行重写,这样能可以大大减少开发成本. 二.调研 抱着对Request请求参数目标出发,对@InitBinder和HttpServletRequestWrapper进行了研究,最终使用HttpServletRequestWrapper解决了当前问题. 1.@InitBinde

  • Struts2之Action接收请求参数和拦截器详解

    技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上. 提供JSP注册的页面,演示下面这三种方式 <h3>注册页面</h3> <form action="${ pageContext.request.contextPath }/xxx.action"

  • spring根据controller中接收请求参数不同走不同service的实现方法

    前言 前几天一个工程中,需要实现这样一个场景:根据前端发送过来的请求参数的不同,走不同的 service(可同事走多个),最初我的思路是尝试实现在 spring 中实现动态的依赖注入,也就是根据请求参数,动态的在 controller 中注入某个 service 接口的特定实现(接口有多个实现),但是发现这个实现不了,然后想了想,换了个思路,重新设计了一下,实现了需求中的场景. 附controller的分类: 正文 我的解决办法是,使用"生产线工人工作能力自己掂量机制"来解决,这名字我

  • springmvc @RequestBody String类型参数的使用

    目录 springmvc @RequestBody String类型参数 springmvc用Map接收请求参数分析 第一种情况,什么也不设置,无参数传递 第二种情况,加个参数试试 => .../testmap?test1=2342 第三种情况,给Map参数添加@RequestParam注解 小结一下吧 springmvc @RequestBody String类型参数 通过如下配置: <bean id="mappingJacksonHttpMessageConverter"

  • 解决springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题

    在spring项目中,当请求方式为post时,可能在获取数据之后会有乱码的情况,其中一种解决方法就是在拿到请求参数之前设置编码格式为utf-8,如下 request.setCharacterEncoding("utf-8"); String strId = request.getParameter("id"); String strName = request.getParameter("name"); String strSex = reque

  • 基于controller使用map接收参数的注意事项

    目录 controller使用map接收参数注意事项 controller使用map接收参数并用POSTman测试 controller使用map接收参数注意事项 关于前端使用map去接收参数的问题 @PostMapping("test01") @ResponseBody // 如果这里不加@RequestBody,那么springmvc默认创建的是BindAwareModelMap public Object test01( Map dataMap) { // 对象,并且都参数都不会

随机推荐