spring MVC 与 ajax 交互 json格式遇见的415、json解析错误

本文详细介绍了在使用jQuery的$.ajax方法与SpringMVC进行交互时,遇到HTTP状态码415数据类型错误和Spring接口接收JSON时出现解析错误的问题解决方法。主要涉及使用$.ajax指定contentType和使用JSON.stringify将对象转换为JSON字符串的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天需要用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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值