背景:

  这两天在项目中遇到了一个问题。我的环境是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格式参数相关推荐

  1. Ajax解析laravelJSON,3分钟短文:Laravel请求体内JSON格式数据的处理办法

    原标题:3分钟短文:Laravel请求体内JSON格式数据的处理办法 引言 前几篇文章我们讲了表单数据的接收,验证等功能.也说到了传送的数组如何处理, 今天我们说一下如果传送的数据是JSON格式,其处 ...

  2. Spring拦截器校验Json格式参数

    Json已经成为一种主流的数据传输格式,请求参数是整个RequestBody. 那么,拦截器中如何获取Json呢? 办法是:通过request.getInputStream. RequestBody是 ...

  3. ajax前端post请求json格式参数,前端js导出,参数以json格式发送post请求

    //下载excel文件 downLoadFile(url: any, data: any, fileName: any) { let other=this;//other.messageService ...

  4. 使用jQuery发送POST,Ajax请求返回JSON格式数据

    问题: 使用jQuery POST提交数据到PHP文件, PHP返回的json_encode后的数组数据,但jQuery接收到的数据不能解析为JSON对象,而是字符串{"code" ...

  5. jsp中jquery传值给Java_jsp中利用jquery+ajax在前后台之间传递json格式参数

    经过一段时间的实验琢磨,终于将前后台之间的参数传递搞定了,实验所用工具myeclipse+structs1.2. 总结:容易出错的地方:1.ajax中data的格式一定要写对,这里举了两种形式,一种是 ...

  6. java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据

    一.在PC Window(QT5版本) 1.1.构建URL 1.2.构建HTTP请求头 1.3.连接信号与操作,接收服务器回复的消息 槽函数这里我们要在头文件定义,然后把处理过程实现. void Ma ...

  7. ajax返回数据输出成表,javascript代码实例教程-ajax请求返回Json格式数据如何循环输出成table形式...

    小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过. 首先,Ajax请求数据,(用的是Jquery的Ajax) [javascript] $(function(){ ...

  8. HTTP get请求发送JSON格式数据

    get请求一般不建议发送JSON格式的数据,单总有一些奇葩系统要求 分享下本人对接途牛 传递get请求 json数据的方法 第一步:平常的get请求不要想了 直接继承 import org.apach ...

  9. Python 使用Schema 实现接口或方法的JSON格式参数的高效、优雅校验

    我们在实际开发过程中,在开发对外开放接口或者公共模块方法,通常会对入参进行校验,当入参为JSON (Dict)类型数据时,可能需要写几十行代码来校验其数据格式是否符合正确,使得代码冗余度高,可读性差. ...

  10. python遍历json_python json格式参数遍历所有key、value 及替换key对于的value

    1.对于接口自动化测试,一般接口以json形式发送返回,往往我们就需要遍历json文件中所有key,value以及修改替换key对于的value. 例如json发送/接收的文件: SendRegist ...

最新文章

  1. OpenvSwitch — Overview
  2. CentOS 7 上安装 redis3.2.3安装与配置
  3. IT 巡检内容、工具、方法 amp; Linux / AIX / Oracle / VMware 巡检表模板 | 周末送资料...
  4. CentOs下php连mssql并配置unixODBC
  5. linux ar 命令详解
  6. 指定Gradle构建属性
  7. 证明Ax=0的最小二乘解是ATA的最小特征值对应的特征向量(||x||=1)
  8. 学MFC的九九八十一难
  9. 学习笔记-Matlab算法篇-动态规划
  10. caj安装,win10,错误1372。无效驱动器:D:\ (解决方案大全总结)
  11. python:求list的中位数
  12. 求解tsw30浊度传感器
  13. win7 iis php mysql_windows7和iis配置的php phpinfo()中没有mysql组件
  14. 瑞星发布中国用户最常用十大密码:abc123
  15. ubuntu解压各种文件
  16. 港科资讯 | 香港科大委任郭毅可教授为首席副校长
  17. 【随笔记】我的 CSDN 两周年创作纪念日
  18. vSphere ESXI配置多网卡链路聚合模式
  19. Cocos2D中的Framerate状态
  20. 天津不错的外资企业_天津外企名录大全

热门文章

  1. 析构函数的标量与矢量?
  2. python---小技巧
  3. C# ComBox 垂直滚动条
  4. 为什么现在我最终推荐内存OLTP
  5. 【转】详解JavaScript中的this指针
  6. “NLP的那些事儿”开张了!
  7. 发点牢骚,关于微软,关于WPF/E
  8. 两端“弱智”的HTML代码
  9. 本地chrome调试服务器node
  10. 在iOS开发中,我们会遇到十六进制和字符串之间相互转换,话不多说,直接上代码:...