今天需要用jquery和spring MVC交互时出现了两个BUG,一个是http状态码415 数据格式错误,另外一个是spring接口接收json时出现解析错误异常。
问题1(http状态码415)解决办法:
使用 $.ajax 发送请求,指定contentType : 'application/json'即可。
错误原因是我使用了JQuery 的 $.post请求,这个里面并没有指定文本格式,通过Chrome调试后发现文本格式为 xxx-form,而不是application/json。
问题2(spring接口接收json时出现解析错误)解决办法:
使用JSON.stringify(data)写在data参数后面; data为json {"data":{"amount" : amount, "channel" : channel}} 。
错误原因是{"data":{"amount" : amount, "channel" : channel}}是一个json对象,而不是json字符串。需要使用JSON.stringify函数将对象转为json字符串。
JSP:
<%@ page contentType="text/html; UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<input type="button" onclick="scoreQuery()" value="获取Charge对象"/>
<script type="text/javascript">
function scoreQuery()
{
var url = "/xxxx/pingtest?access_token=";
var amount = "1.00";
var channel = "upacp_pc";
var data = {"data":{"amount" : amount, "channel" : channel}};//upacp_pc
$.ajax({
type : 'POST',
url : url,
contentType : 'application/json',
dataType : 'json',
data : JSON.stringify(data),
success : function(data){
pingppPc.createPayment(data.bizData, function(result, err){
// 处理错误信息
});
},
error : function() {
// view("异常!");
alert("异常!");
}
});
}
</script>
<script src="${pageContext.request.contextPath}/assets/js/jquery-1.11.3.js"></script>
<script src="${pageContext.request.contextPath}/assets/js/pingpp-pc.js"></script>
</body>
</html>
Spring:
@ApiDesc(value = "ping++支付", returnDesc = "Charge", owner = "wdong")
@RequestMapping(value = "/pingtest", method = RequestMethod.POST)
@ResponseBody
public Charge pingtest(
@ApiParam(desc = "ping++相关参数") @RequestBody RequestT<Map<String, String>> request,
@ApiParam(desc = "身份唯一验证值") @RequestParam("access_token") String token)