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")
@ResponseBody
public Object test1(@RequestBody String pageData)
throws IOException
{
System.out.println(pageData);
return pageData;
} @RequestMapping(value = "/test2")
@ResponseBody
public 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, //默认值true
dataType : "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格式参数的更多相关文章
- Winform Post请求传递Json格式参数的写法
注意的是,Json传递需用到Hashtable(哈希表)来添加参数,本人也试过用JObject添加页不行,感觉应该可以的不知道怎么回事,直接上代码, Hashtable ht = new Hashta ...
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析 一:问题demo展示 ...
- springmvc通过ajax异步请求返回json格式数据
jsp 首先创建index.jsp页面 <script type="text/javascript"> $(function () { $("#usernam ...
- JAVA发送POST请求携带JSON格式字符串参数
import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.htt ...
- SpringMVC通过实体类返回json格式的字符串,并在前端显示
一.除了搭建springmvc框架需要的jar包外,还需要这两个jar包 jackson-core-asl-1.9.2.jar和jackson-mapper-asl-1.9.2.jar 二.web,. ...
- 使用jQuery发送POST,Ajax请求返回JSON格式数据
问题: 使用jQuery POST提交数据到PHP文件, PHP返回的json_encode后的数组数据,但jQuery接收到的数据不能解析为JSON对象,而是字符串{"code" ...
- java web 服务器端处理json格式参数
前面我们说了传递参数的两种访书,第一是key-value形式,第二是json格式,对于第一种我们在服务器端直接使用 request.getParameter("key");就能获取 ...
- get请求传递json格式数据的两种方法
get请求参数为json格式数据,使用pyhton+request的两种实现方式如下: 方法一:使用requests.request() 示例代码如下: 1.导入requests和json impor ...
- SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析
两个方向: 一.前台至后台: Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int, ...
随机推荐
- tomcat8.5性能优化
主要是按照两篇文章,部分参数因适配Tomcat8.5进行了调整 一.有关 JAVA_OPTS http://www.open-open.com/lib/view/open1401931407228.h ...
- kali Rolling安装之后的一些常用配置总结(更新)
原文: https://ssooking.github.io/kali-rolling-an-zhuang-zhi-hou-de-yi-xie-chang-yong-pei-zhi-zong-jie/ ...
- python抓取今日头条
# 直接上代码,抓取关键词搜索结果的json数据# coding:utf-8 import requests import json url = 'http://www.toutiao.com/sea ...
- [ADC]TI am4378 ADC采样设置问题(am335x类似)
这段时间在调试AM4378的ADC问题,发现采样到的数据和真实输入波形有所出入,比如输入是1ms的周期,50%占空比的信号,但是采样的数据描点总是偏差较大,数据如下 iio device number ...
- C++生成全局唯一Guid
在软件开发中,我们经常需要一个唯一标识来标识一个对象,在PHP中,可以用UUID来获得全局唯一的ID,其实C++也内置了简单的GUID获得办法,猜想GUID应该是本机的特征以及运行的时间的一个哈希值, ...
- [开发笔记]-实现winform半透明毛玻璃效果
亲测win7下可用,win8下由于系统不支持Aero效果,所以效果不是半透明的. 代码: 博客园插入不了代码了..... public partial class Form1 : Form { int ...
- Redis初步认识
官网:redis.io Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的 ...
- c# 自定义类型的DataBindings
自定义类型TextBoxEx,扩展了TextBox,增加了一个属性KeyText来保存后台的值(Tag已另作它用). 程序里面需要将KeyText和DataTable的某个列绑定起来. 如果是Text ...
- WebForm发送邮件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Ne ...
- Scrapy 导出的 cvs 文件,双击打开乱码问题
默认可能是utf8格式,在excel的不要直接打开,而是在excel - 数据 -导入里打开,或者打开前用vscode之类的保存为GBK编码