在Spring Controller方法中发布一系列JavaScript对象并映射到Java域

时间:2016-05-24 21:33:26

标签: javascript jquery ajax spring

我正在尝试编写一个ajax post请求,该请求命中Spring Controller方法并提供一些请求参数,其中一个是JavaScript对象数组:vendorBillingDetails。这些JavaScript对象具有匹配的Java域类,我想将它们映射到此域类。这似乎是Spring MVC应该能够做到的,但到目前为止,我只能使用只有一个请求参数的html表单找到示例。

以下是我的控制器和ajax请求。希望有人可以告诉我如何正确地映射这个,因为我迄今为止尝试过的所有事情都失败了。

$.ajax({
    url : '/ui/clearBilling',
    type : 'POST',
    data : { "trackId": trackId, "vendorBillingDetails": vendorBillingDetails,  "_csrf": csrf },
    async : true,
    success : function(data) {
            jqAlert("Selected item(s) were cleared");
    },
    fail: function(e) {
        jqAlert("There was an error with the request"); 
    }
});

});

@RequestMapping(value = "/clearBilling", method = RequestMethod.POST)
public @ResponseBody String setClearVendorBillingPO(@RequestParam BigInteger trackId, @RequestParam(value = "vendorBillingDetails[]") List<VendorBillingDetail> vendorBillingDetails, HttpServletRequest request) {

    //TODO stuff

}

2 个答案:

答案 0 :(得分:1)

我做过类似的事情,但只发送了一个json对象,所以你可能需要调整或将其包装在另一个包含你关心的所有请求参数的对象中。尝试使用@RequestBody注释。

@RequestMapping(value = "/clearBilling", method = RequestMethod.POST)
public @ResponseBody String setClearVendorBillingPO(@RequestBody List<VendorBillingDetail> vendorBillingDetails, HttpServletRequest request) {

//TODO stuff

}

在ajax调用中,你可以使用JSON.stringify()(json2.js的一部分)

$.ajax({
        url : "/ui/clearBilling",
        type : "POST",
        async : true, 
        data : JSON.stringify(vendorBillingDetails),
        contentType : "application/json"
    });

答案 1 :(得分:0)

这不起作用。不知何故,对象数组上的RequestMapping结束于控制器接收端的错误。可能最好尝试作为JSON主体发送,然后在弹簧控制器中解组。