Spring MVC + Ajax错误400

时间:2016-11-24 18:31:30

标签: json ajax spring

我在Spring MVC上有一个简单的java应用程序,我向Spring控制器发送ajax请求。当我设置标题"接受"," application / json" " Content-Type","应用程序时/ json; charset = utf-8" 在AJAX调用中我在dubugger中得到 错误400 ,当我删除它时我得到 错误415

如果我将控制器方法签名更改为 public String logoutPage(@RequestBody String obyavleniye) ,我会获得JSON字符串。控制器中的解析请求有什么问题?

JS方法:

$("#advertForm").submit(function(e) {
        e.preventDefault();
        var token = $("meta[name='_csrf']").attr("content");
        var header = $("meta[name='_csrf_header']").attr("content");
        var obyavleniye = {
            title: "Title",
            price: "80",
            description: "desc",
            date: "2016-11-07 18:30:21",
            authorid: "2",
            category: "A",
            state: "new",
            img1: "http",
            img2: "http",
            img3: "http",
            img4: "http",
        };
        var post_data = JSON.stringify(obyavleniye);

        console.log(post_data);
        $.ajax({
            url : "/upload",
            type: "POST",
            dataType: 'json',
            data: post_data,
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8");
                xhr.setRequestHeader(header, token);
            },
            complete: function() {
                console.log("Sent");
            },
            success: function (response) {
                console.log("success");
                console.log("response" + response);
            },
            error: function (data) {
                console.log("error");
                console.log(data);
            }
        });
    });

控制器方法:

@ResponseBody
    @RequestMapping(value="/upload", method = RequestMethod.POST)
    public String logoutPage (@RequestBody Advert obyavleniye) {
//    public String logoutPage (@RequestBody String obyavleniye) {
        System.out.println("Enter: " + obyavleniye);
        this.advertService.addAdvert(obyavleniye);
//        return "{\"msg\":\"success\"}";
        return "{\"title\":\"Title\",\"price\":\"80\",\"description\":\"normm\",\"date\":\"2016-11-07 18:30:21\",\"authorid\":\"2\",\"category\":\"A\",\"state\":\"new\",\"img1\":\"http\",\"img2\":\"http\",\"img3\":\"http\",\"img4\":\"http\"}";
    }

2 个答案:

答案 0 :(得分:1)

我的示例代码。

<强> JS

  Company.prototype.saveCompanyLocation = function() {
        /* company */
        var companyIdx = $('#companyIdx').val();
        var locationIdx = $('#locationIdx').val();

        var data = {
            idx : locationIdx,

            postCode : $('#postCode').val(),
            address : $('#address').val(),
            detailAddress : $('#detailAddress').val(),

            tel : $('#tel').val(),
            fax : $('#fax').val(),
            email : $('#email').val(),
            language : $("#language").val(),

            latitude : $('#latitude').val(),
            longtitude : $('#longtitude').val()

        };

        data = JSON.stringify(data);

        $.ajax({
            url : "/gpim/company/settings/location/save/" + companyIdx,
            type : 'POST',
            data : data,
            contentType : 'application/json',

            success : function(response) {
                if (response == "success") {
                    document.location.reload(true);
                } else {
                    $("#editMsg").text("you can`t save location information.");
                }
            },
            error : function(request, status, error) {

            }
        });
    };

<强>控制器

@RequestMapping(value = "/settings/location/save/{companyIdx}", method = RequestMethod.POST)
    public @ResponseBody String saveLocation(@PathVariable int companyIdx, @RequestBody CompanyLocation location) {
        Company company = companyService.findCompanyByIdx(companyIdx);

        company = companyService.saveCompanyLocation(company, location);

        if (company != null) {
            return "success";
        }

        return "fail";
    }

答案 1 :(得分:1)

执行以下步骤:

1)尝试将jackson jar文件保存在类路径中

2)eighter你发送ajax请求时删除了数据类型,即

dataType : "json"

或者您必须按如下所示生成application / json响应

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

3)检查您的DTO或广告类属性哪个类型应与传入请求匹配。即请求参数应与DTO成员的名称和类型相匹配。

这些是避免你的情况的可行方法。