Springmvc 的post请求的json格式参数
背景:
这两天在项目中遇到了一个问题。我的环境是springmvc4.1.9,写了几个可以用ajax请求的接口(ajax、jsonp 调用正常)。突然一时兴起就用 HTTP 请求的工具(比如火狐浏览器的插件HTTPRequester,fiddler等等)来访问一下我的接口,然后就傻眼了,传入到后台的方法不能正常得到数据。
分析:
这里我们只做get请求和post 请求 分析。
1) springmvc 的配置方法不说了,保证包含<mvc:annotation-driven/> 即可。
2) 必备的jar 必不可少。springmvc 内置的json 处理包是 jackson,完整引入方式。引入包有jackson-databind,jackson-core,jackson-annotations
<dependency><groupId>com.fasterxml.jackson.module</groupId><artifactId>jackson-module-jaxb-annotations</artifactId><version>${jackson.version}</version></dependency>
3) 采用注解方式来实现Controller
package com.bkc.bpmp.modules.external.controller;import java.io.IOException;
import java.util.Map;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import com.bkc.bpmp.modules.external.pojo.ExternalSingleResult;@Controller
@RequestMapping("/external")
public class Test
{@RequestMapping(value = "/test1")@ResponseBodypublic Object test1(@RequestBody String pageData)throws IOException{System.out.println(pageData);return pageData;}@RequestMapping(value = "/test2")@ResponseBodypublic Object test2(@RequestParam String pageData)throws IOException{System.out.println(pageData);return pageData;}}
4)对应test2,采用的是 @RequestParam 方式获取的参数
其参数格式就是一般 a=a&b=b 模式
而对于test1,采用的是 @RequestBody 方式获取的参数
其参数格式就是 json格式的字符串,{"a":"valueA","b":"valueB"}
5)在我使用 HTTP请求工具测试 test2 的时候,一直报 415
HTTP 415 错误 – 不支持的媒体类型(Unsupported media type)
因为我设置的请求格式为application/json ,应该为 application/json;charset=UTF-8
6)使用ajax 请求来测试,测试方法如下
在TestAjax()方法中,data 是一个json 数组,用这种方式去发送请求的时候,其实本质上就是参数格式为 a=a&b=b 模式。TestAjax2() 方法,传递的则是 json 字符串
function TestAjax() {var datas = {"equObjCode" : "EO_10HLB21AN001.QY-GL01.JZ-01.TY"};var url = "/external/test2";var obj = $("#result");var data = $.parseJSON(datas);$.ajax({type : "get",async : false,url : url,data : data,//cache : false, //默认值truedataType : "jsonp",jsonp : "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)jsonpCallback : "jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名//如果这里自定了jsonp的回调函数,则success函数则不起作用;否则success将起作用success : function(data) {obj.html(JSON.stringify(data));//obj.parent().css("background","#ddd");},error : function(XMLHttpRequest, textStatus) {obj.html(XMLHttpRequest.status + ","+ XMLHttpRequest.readyState + ",error="+ textStatus);}});
}function TestAjax2() {var datas = {"equObjCode" : "EO_10HLB21AN001.QY-GL01.JZ-01.TY"};var url = "/external/test1";var obj = $("#result");$.ajax({type : "post",url : url,data : data,dataType : "json", contentType : 'application/json;charset=UTF-8',success : function(data) {obj.html(JSON.stringify(data));},error : function(XMLHttpRequest, textStatus) {obj.html(XMLHttpRequest.status + ","+ XMLHttpRequest.readyState + ",error="+ textStatus);}});
}
7)
jsonp 只支持get 请求,不支持post 请求。
post模式下,使用@RequestBody 绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。
其他参考:
HTTP Status 415的解决方案 http://www.cnblogs.com/qq78292959/p/3761646.html
Springmvc 的post请求的json格式参数相关推荐
- Ajax解析laravelJSON,3分钟短文:Laravel请求体内JSON格式数据的处理办法
原标题:3分钟短文:Laravel请求体内JSON格式数据的处理办法 引言 前几篇文章我们讲了表单数据的接收,验证等功能.也说到了传送的数组如何处理, 今天我们说一下如果传送的数据是JSON格式,其处 ...
- Spring拦截器校验Json格式参数
Json已经成为一种主流的数据传输格式,请求参数是整个RequestBody. 那么,拦截器中如何获取Json呢? 办法是:通过request.getInputStream. RequestBody是 ...
- ajax前端post请求json格式参数,前端js导出,参数以json格式发送post请求
//下载excel文件 downLoadFile(url: any, data: any, fileName: any) { let other=this;//other.messageService ...
- 使用jQuery发送POST,Ajax请求返回JSON格式数据
问题: 使用jQuery POST提交数据到PHP文件, PHP返回的json_encode后的数组数据,但jQuery接收到的数据不能解析为JSON对象,而是字符串{"code" ...
- jsp中jquery传值给Java_jsp中利用jquery+ajax在前后台之间传递json格式参数
经过一段时间的实验琢磨,终于将前后台之间的参数传递搞定了,实验所用工具myeclipse+structs1.2. 总结:容易出错的地方:1.ajax中data的格式一定要写对,这里举了两种形式,一种是 ...
- java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据
一.在PC Window(QT5版本) 1.1.构建URL 1.2.构建HTTP请求头 1.3.连接信号与操作,接收服务器回复的消息 槽函数这里我们要在头文件定义,然后把处理过程实现. void Ma ...
- ajax返回数据输出成表,javascript代码实例教程-ajax请求返回Json格式数据如何循环输出成table形式...
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过. 首先,Ajax请求数据,(用的是Jquery的Ajax) [javascript] $(function(){ ...
- HTTP get请求发送JSON格式数据
get请求一般不建议发送JSON格式的数据,单总有一些奇葩系统要求 分享下本人对接途牛 传递get请求 json数据的方法 第一步:平常的get请求不要想了 直接继承 import org.apach ...
- Python 使用Schema 实现接口或方法的JSON格式参数的高效、优雅校验
我们在实际开发过程中,在开发对外开放接口或者公共模块方法,通常会对入参进行校验,当入参为JSON (Dict)类型数据时,可能需要写几十行代码来校验其数据格式是否符合正确,使得代码冗余度高,可读性差. ...
- python遍历json_python json格式参数遍历所有key、value 及替换key对于的value
1.对于接口自动化测试,一般接口以json形式发送返回,往往我们就需要遍历json文件中所有key,value以及修改替换key对于的value. 例如json发送/接收的文件: SendRegist ...
最新文章
- OpenvSwitch — Overview
- CentOS 7 上安装 redis3.2.3安装与配置
- IT 巡检内容、工具、方法 amp; Linux / AIX / Oracle / VMware 巡检表模板 | 周末送资料...
- CentOs下php连mssql并配置unixODBC
- linux ar 命令详解
- 指定Gradle构建属性
- 证明Ax=0的最小二乘解是ATA的最小特征值对应的特征向量(||x||=1)
- 学MFC的九九八十一难
- 学习笔记-Matlab算法篇-动态规划
- caj安装,win10,错误1372。无效驱动器:D:\ (解决方案大全总结)
- python:求list的中位数
- 求解tsw30浊度传感器
- win7 iis php mysql_windows7和iis配置的php phpinfo()中没有mysql组件
- 瑞星发布中国用户最常用十大密码:abc123
- ubuntu解压各种文件
- 港科资讯 | 香港科大委任郭毅可教授为首席副校长
- 【随笔记】我的 CSDN 两周年创作纪念日
- vSphere ESXI配置多网卡链路聚合模式
- Cocos2D中的Framerate状态
- 天津不错的外资企业_天津外企名录大全