文档章节

spring @RequestParam, @RequestBody Map注入注意事项

xixingzhe
 xixingzhe
发布于 2017/09/08 17:52
字数 380
阅读 2605
收藏 1

该博客内容不仅限于对map的注意项,对其他pojo一样有效。map只是给示例而已。

 

1、@RequestBody

1.1 一个参数时

@RequestMapping(value="/test3",method=RequestMethod.POST)
public boolean test3(@RequestBody Map<String, String> fieldValueList) {
	System.out.println(JSON.toJSONString(fieldValueList));
	return true;
}

测试方式:

1.2 多个参数时

@RequestMapping(value="/test4",method=RequestMethod.POST)
public boolean test4(@RequestParam("key") String key,@RequestBody Map<String, String> fieldValueList) {
	System.out.println(key+":"+JSON.toJSONString(fieldValueList));
	return true;
}

测试方式:

错误方式如下图所示,会抛出异常

“org.springframework.http.converter.HttpMessageNotReadableException”:

 

总结:

  • @RequestBody需要把所有请求参数作为json解析,因此,不能包含key=value这样的写法在请求url中,所有的请求参数都是一个json
  • 直接通过浏览器输入url时,@RequestBody获取不到json对象,需要用java编程或者基于ajax的方法请求,将Content-Type设置为application/json

  

2、@RequestParam

2.1 一个参数时

@RequestMapping(value="/test",method=RequestMethod.POST)
public boolean test(@RequestParam Map<String, String> fieldValueList) {
	System.out.println(JSON.toJSONString(fieldValueList));
	return true;
}

测试方式:

得到结果为:{"aa":"bb","cc":"dd"}

错误方式:

得到结果:{"fieldValueList":"{\"aa\":\"bb\",\"cc\":\"dd\"}"},并不是我们想要的。

2.2 多个参数时

@RequestMapping(value="/test2",method=RequestMethod.POST)
public boolean test2(@RequestParam("key") String key, @RequestParam Map<String, String> fieldValueList) {
	System.out.println(JSON.toJSONString(fieldValueList));
	return true;
}

错误方式:

得到结果:{"key":"aa","aa":"bb","cc":"dd"},并不是我们想要的。多出了"key":"aa"。

 

得到结果:{"fieldValueList":"{\"aa\":\"bb\",\"cc\":\"dd\"}","key":"aa"},并不是我们想要的。

 

总结:

  • @RequestParam参数中包含Map时,不要再写其他参数了,否则,map都会包含进去。

© 著作权归作者所有

共有 人打赏支持
xixingzhe
粉丝 2
博文 175
码字总数 46744
作品 0
西城
程序员
私信 提问
Spring框架 - Web框架 实现Controller

实现Controller 实现基本的Controller并处理输入输出 基本的Controller 添加了Controller Annotation声明该类是Controller 也添加RequestMapping,通过value制定的的路径 我们在函数处理之前...

抢小孩糖吃
2016/10/28
47
0
ajax contentType的问题

通过比对request请求,如果ajax加了 contentType: 'application/json; charset=UTF-8' 数据的存放位置不同, 分别在request payload 和 form data中 在springmvc中的获取方式也有所区别 1.所......

mr_mou
2016/11/14
1
0
Ajax和SpringMVC之间JSON交互

Ajax和SpringMVC之间的json数据传输有两种方式: 1.直接传输Json对象 2.将Json序列化 1.直接传输Json对象 前端Ajax 后端使用 后端

努力学习ding
2018/06/03
0
0
求解:关于spring的@RequestParam与@RequestBody参数绑定的问题

在使用springMVC过程中,遇到参数绑定的问题,望各位帮忙指定一下 1) 使用@RequestParam方式绑定参数,除了能绑定String类型的参数外,可否绑定数组类型的参数以及Date类型的参数? 2) 使用@...

mrZhan_223
2014/09/01
17.5K
8
【spring】——常用注解介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fjj15732621696/article/details/80643952 组件类注解 在spring注入bean的时候常用的一种方式就是通过注解,装...

DD_Davina
2018/06/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 在package.json中的scripts里添......

Chason-洪
25分钟前
1
0
Linux系统快速查找文件的技巧

Linux常用命令中,有些命令可以帮助我们查找二进制文件,帮助手册或源文件的位置,也有的命令可以帮助我们查找磁盘上的任意文件,今天我们就来看看这些命令如何使用。 which which命令会在P...

Linux就该这么学
27分钟前
1
0
dotConnect for Oracle入门指南(八):通过OracleCommand类使用存储过程

【下载dotConnect for Oracle最新版本】 dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的解决方案。它为设计应用程序结构带来了新的...

电池盒
28分钟前
1
0
JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换

摘要: 深入JS系列15。 原文:深入类和继承内部原理 + Babel和TypeScript 之间转换 作者:前端小智 Fundebug经授权转载,版权归原作者所有。 这是专门探索 JavaScript 及其所构建的组件的系列...

Fundebug
38分钟前
2
0
js 引用传值问题踩坑

先自测一下,答案在最下边。 <html><head><script type="text/javascript" src="/jquery/jquery.js"></script><script type="text/javascript">$(document).ready(function(){$("button......

S三少S
50分钟前
14
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部