博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springmvc 的post请求的json格式参数
阅读量:5061 次
发布时间:2019-06-12

本文共 3467 字,大约阅读时间需要 11 分钟。

背景:

  这两天在项目中遇到了一个问题。我的环境是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

com.fasterxml.jackson.module
jackson-module-jaxb-annotations
${jackson.version}

  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

 

转载于:https://www.cnblogs.com/panie2015/p/6387561.html

你可能感兴趣的文章
2-13 常量变量四则运算
查看>>
第八章 高级搜索树 (xa3)红黑树:插入
查看>>
kafka安装-mac
查看>>
C#开发中碰到的问题------easyUI 框架下dialog加载HTML页面不执行js问题
查看>>
ios原声音频播放AVAudioSession 总结
查看>>
mybatis与oracle使用总结
查看>>
poj 3155 Hard Life 最大密度子图
查看>>
python入门
查看>>
建亿级前端读服务
查看>>
传统意义的四舍五入计算
查看>>
NodeJs中npm使用
查看>>
git合并历史提交
查看>>
3、块元素
查看>>
设计模式(第十二式:享元模式)
查看>>
多线程编程(进程和线程)
查看>>
MySQL 修改 root 密码命令
查看>>
c# 保留2位小数
查看>>
BETA 版冲刺前准备
查看>>
js无缝滚动
查看>>
Diameter协议摘要
查看>>