2014-11-21 5 views
1

JSONObject всегда пуст для метода ниже.@RequestBody всегда пуст весной

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

и мой аякс такой. Я способов получать объект как пустую карту на стороне сервера

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); 
       } 
      }); 
+0

Несколько вопросов, 1.) Является ли 'sPackage' пустым или что 2.) Если не null, какое значение, пустая строка для' customerName' 3.) Вы видели запрос 'POST', какие данные отправлены –

+0

sPackage - пустая карта. Данные отправляются надлежащим образом {"customerName": "декабрь, апрель"} – Yahiya

ответ

1

Я думаю spring не знает, чтобы преобразовать ваш json в JSONObject, лучше всего было бы принять POJO object, который имеет структуру, аналогичную структуре вашей json ,

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

@Yahiya кажется, что Spring нужен какой-то объект для сопоставления json с ним, используйте некоторые POJO –

0

Уверены ли вы, что в вашем коде 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(); 
} 

Конечно, если вы хотите передать в имя клиента как String для вашего контроллера, вы также можете передать его в качестве строки запроса (append? customerName = someCustomer), и вы можете получить его в Spring как:

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT) 
@ResponseStatus(HttpStatus.OK) 
@ResponseBody 
public SPackage updatePackage(@PathVariable String id, @RequestParam("customerName") String customerName) { 
} 
Смежные вопросы