2014-02-18 2 views
1

У меня есть проект Spring MVC, и я настроил библиотеку jackson для автоматического преобразования ответа (java-объекта) в json и работает в GET-запросах следующим образом.Как получить объект из API REST с Spring MVC

@RequestMapping(method = RequestMethod.GET) 
public @ResponseBody Orders createOrder(Model model){ 

      Orders orders = new Orders(); 
      //Populate orders..... 

    return orders; 
} 

Но когда я пытаюсь обработать запрос POST и получить объект из запроса JSon, я получаю ошибку «400 Bad Request», как весна не может создать объект заказов из JSON. Я поместил тот же json-файл, что и ответ метода GET, поэтому я полагаю, что файл хорошо отформатирован.

@RequestMapping(method = RequestMethod.POST) 
public @ResponseBody ResponseEntity<String> createOrder(@RequestBody Orders orders){ 

    LOG.info(orders.toString()); 

    return new ResponseEntity<String>("", HttpStatus.CREATED); 
} 

Если изменить класс @RequestBody в строку (CreateOrder (@RequestBody строк заказов)), запрос POST хорошо обрабатывается.

Должен ли я создать картутор, который отображает входные данные json в класс Order?

UPDATE: Я создал самый простой пример, чтобы попробовать, и я получаю ошибку 400. Exmaple:

Домен: Home.java

public class Home { 
    private String address = "Calle mármoles"; 

    public Home(){ 

    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 
} 

Контроллер:

@RequestMapping(method = RequestMethod.POST) 
public @ResponseBody ResponseEntity<String> createOrder2(@RequestBody Home orders){ 
    return new ResponseEntity<String>("{}", HttpStatus.CREATED); 
} 

JSON (POST):

{ 
    address: "Prueba" 
} 

[SOLVED]

Я пропустил, чтобы поместить «» во имя имени параметра.

+0

Как вы называете свой почтовый метод? Является ли тело запроса состоящим только из json из GET? – Avi

+0

Да, в теле есть только JSON. –

+1

Вероятно, лучше всего, чтобы вы положили свое решение в качестве ответа, так что A) Этот вопрос правильно обозначен как решенный, и B) Это очевидно для других людей, у которых может быть аналогичная проблема в будущем, что было не так в вашем случае. – Edd

ответ

0

[РЕШИТЬ]

я пропустил поставить «» во имя имени параметра.

Кроме того, класс должен иметь пустой конструктор по умолчанию, чтобы позволить библиотеке jackson, создающей объект.

Смежные вопросы