2013-01-08 2 views
2

Я выполняю контроллер Spring MVC, и у меня все еще возникает проблема с операцией POST. Я прочитал много решений по stackoverflow, чтобы не исправить мою проблему.Spring MVC 3.1 REST services post method return 415

Мои достижения на данный момент:

  • Я послал запрос GET с Ид и возвращает объект преобразуется в формат JSON успешно.
  • мне не удалось отправить POST запрос с телом JSON, return = 415 UNSUPPORTED_MEDIA_TYPE

1) Я добавил к моему pom.xml Джексона API: 1.8.5

2) Мой файл конфигурации Spring: Я добавил все необходимые детали:

  • viewResolver
  • org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
  • MappingJacksonHttpMessageConverter
  • MVC: аннотацию управляемые
  • отсканировать мои контроллеры

3) Моя модель объекта проста: Счет с Id, Name и количество

@Document 
public class Account implements Serializable { 

    private static final long serialVersionUID = 9058933587701674803L; 

    @Id 
    private String id; 
    private String name; 
    private Double amount=0.0; 

    // and all get and set methods 

4) и, наконец, мой упрощенный класс контроллера:

@Controller 
public class AdminController { 

    @RequestMapping(value="/account", method=RequestMethod.POST, 
      headers = {"content-type=application/json"}) 
    @ResponseStatus(HttpStatus.CREATED) 
    public void addAccount(@RequestBody Account account){ 
     log.debug("account from json request " + account); 
    } 


    @RequestMapping(value="/account/{accountId}", method=RequestMethod.GET) 
    @ResponseBody 
    public Account getAccount(@PathVariable("accountId") long id){ 
     log.debug("account from json request " + id); 
     return new Account(); 
    } 
} 

5) На стороне клиента я только исполненные локон команды: Успешно GET команда:

curl -i -GET -H 'Accept: application/json' http://myhost:8080/compta/account/1 

POST команда, которая не удалась:

curl -i -POST -H 'Accept: application/json' -d '{"id":1,"name":"test",amount:"0.0"}' http://myhost:8080/compta/account 

Любые идеи, где я буду неправильно?

ответ

4

Попробуйте это:

curl -i -POST -H "Accept: application/json" -H "Content-type: application/json" -d '{"id":1,"name":"test",amount:"0.0"}' http://myhost:8080/compta/account 
+0

ТНХ для ответа. опция -X не возвращает результат с моей командой curl. и Contet-type возвращают еще один плохой статус HTTP: 400 – user1842947

6

Ну, "UNSUPPORTED_MEDIA_TYPE" должен быть намек. Ваша команда curl фактически отправки:

Content-Type: application/x-www-form-urlencoded 

Просто добавьте явный Content-Type заголовок, и вы хорошо идти:

curl -v -i -POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"id":1,"name":"test",amount:"0.0"}' http://myhost:8080/compta/account 
+0

Благодарю вас за ответ, я получаю еще один плохой статус HTTP 400 – user1842947

+1

@ user1842947: это означает, что вы отправляете неправильный JSON (* Bad request *), который Spring MVC не может проанализировать , Пожалуйста, предоставьте более подробную информацию по вашему вопросу или (лучше) отметьте этот вопрос в ответ и откройте еще один. –

+0

ok, thx, я пытаюсь добавить свой класс контроллера в свой вопрос для получения дополнительной информации, но я получаю сообщение об ошибке переполнения стека об отступом кода (4 пробела) Я пытаюсь исправить это, и я опубликую его – user1842947