2

我正在做一个 Spring MVC 控制器,但我仍然遇到 POST 操作的问题。我已经阅读了许多关于 stackoverflow 的解决方案,但没有解决我的问题。

我目前的成就:

  • 我发送了一个带有 Id 的 GET 请求,并成功返回了一个转换为 JSON 的对象。
  • 我未能发送POST带有 JSON 正文的请求,return = 415 UNSUPPORTED_MEDIA_TYPE

1)我在 pom.xml 中添加了 Jackson API:1.8.5

2) 我的 Spring 配置文件:我添加了所有必要的部分:

  • 视图解析器
  • org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
  • 映射JacksonHttpMessageConverter
  • mvc:注解驱动
  • 扫描我的控制器

3) 我的模型对象很简单:一个带有 ID、名称和金额的帐户

@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)在客户端我刚刚执行了 curl 命令:成功的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

2 回答 2

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
于 2013-01-08T19:41:31.977 回答
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
于 2013-01-08T19:40:49.887 回答