@RequestBody总是空的春天(@RequestBody is always empty in

2019-10-21 07:43发布

该JSONObject的总是来找下面的方法为空。

 @RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody JSONObject   
 sPackage) {
}

和我的AJAX是这样的。 我的方式获取对象空映射在服务器端

   var jsonObject= {"customerName":$('#customerName').val()}
     var jsonData = JSON.stringify(jsonObject);  
            $.ajax({ 
                type: "PUT",
                url: "http://localhost:8081/someproj/package/" + $('#id').val(),
                dataType: "json",
                data: jsonData,
                async: false,                                               
                contentType: "application/json; charset=utf-8",
                beforeSend : function() { 
                    openModal();
                },
                success: function(data) { 
                    closeModal();
                $('#success').show();
                 console.log(data);
                }
            }); 

Answer 1:

我想spring不知道你的转换jsonJSONObject ,最好的办法是接受一个POJO object具有相似的结构,以你的json

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody YourJsonPOJO   
 sPackage) {
}


Answer 2:

你肯定有会在你的Spring代码不发生异常。 当从JSON在春季转换为自定义对象,你需要指定具有相同的字段及格式的JSON进来一个自定义类。否则,Spring不知道是谁HTTP POST数据转换成一个Java对象。

在你的情况,你可以做这样定义一个POJO:

public class MyRequestObj {
    private String customerName;
    // add more fields for any other keys from JSON
}

并把这个在你的控制器类:

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody MyRequestObj   
 myRequestObj) {
    String customerName = myRequestObj.getCustomerName();
}

当然,如果你只是想在客户名称作为字符串到控制器通过,那么你也可以把它作为查询字符串(附加客户名称= someCustomer?),你可以在Spring作为检索它:

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestParam("customerName") String customerName) {
} 


Answer 3:

您可以使用此解决方法:

@RequestBody Map<String, String> json

这样,你可以继续使用杰克逊HttpMessageConverter和有效载荷的自定义对象。

您可以检查扩展explanaition为什么在这里回答情况

@RequestBody发出POST请求时给出空的JSONObject



文章来源: @RequestBody is always empty in Spring