AJAX Post动态JSON对象MVC映射

时间:2016-07-12 05:33:25

标签: json ajax

我有一个动态名称/值对,我作为JSON传递给控制器​​。

示例:使用以下JQuery生成的动态JSON对象

{"vehicles":[{"odometer_675552753":"73750","odometer_723646452":"68127""price_709725300":"22984","price_709725299":"22999"}]}


var vehicleData = { 
        vehicles : [] 
    };

var vehicles = {}; 
$('.firDataField').each(function() {
     var id = $(this).attr("name");
     var value = $(this).val();
     vehicles[id]=value;
});
vehicleData.vehicles.push(vehicles);

$.ajax({
    url: 'SaveVehicles.html',
    contentType : 'application/json; charset=utf-8',
    data:JSON.stringify(vehicleData),
    type: "POST",
    cache:false,
    dataType : 'json',
    success: function(data){        
        hideAjaxLoader();
    },
    error : function(jqxhr, textStatus, errorThrown) {
        $('tbody#tbodyVehicleSearchData').html(''); 
        hideLoading();
        showGenericErrorMessage(jqxhr, textStatus, errorThrown, "VehicleSearch");
    }
});


Controller:

@RequestMapping("/SaveVehicles.html")
public void
String saveVehicles(
        @RequestParam(required = false, value = "vehicles") String jsonVehicleObject,
        HttpServletRequest request, Model model)
        throws Exception{
    LOGGER.entry();

    System.out.println("json: " + jsonVehicleObject);
}

jsonVehicleObject始终为null。我尝试过使用带车辆的RequestBody作为对象类型。但没用。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果您在AJAX中使用type: 'Post',则意味着您需要在Controller中添加请求类型。

尝试在控制器中使用它,

[HttpPost]
public void 
String saveVehicles(..)

在方法中使用httpPost来定义响应类型。

答案 1 :(得分:0)

你使用杰克逊。 杰克逊将Java对象转换为JSON或来自JSON

你搜索杰克逊。 :d

示例代码。

(pom.xml中)

<!-- Jackson -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.3</version>
</dependency>

(JS)

var list = new Array();

list.push(Your data);

data = JSON.stringify(list);
$.ajax({
        url : "your url",
        type : 'POST',
        data : data,
        contentType : 'application/json',

        success : function(response) {

        },
        error : function(request, status, error) {

        }
});

(控制器)

@RequestMapping(value = "your path", method = RequestMethod.POST)
public @ResponseBody String test(@RequestBody List<TestModel> models) {


    return null; // break point, check model.
}

您创建模型。