Spring MVC POST不支持的媒体类型

时间:2014-01-22 20:53:38

标签: java javascript ajax spring-mvc post

我收到415 HTTP不支持的媒体类型错误,包含以下代码:

Spring MVC Controller:

    @RequestMapping(value="/addItem", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<String> addItem(@RequestBody final ToDoItem item) {
        toDoItemDao.create(item);
        return new ResponseEntity<String>(HttpStatus.OK);
    }

JavaScript AJAX请求:

$.ajax({
    url: ToDoDemo.serverRoot + "/addItem",
    type:'POST',
    contentType: 'application/json',
    dataType:"json",
    data: JSON.stringify(oItem),
    success: function() {
    ...
    },
    error: function(jqXHR, strStatus, strErrorThrown) {
    ...
    }
});

的pom.xml:

  <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.8</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.8</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.9.7</version>
    </dependency>

在StackOverflow上有很多类似的问题我尝试使用它们的解决方案,但没有一个对我有效。 我错过了什么?

2 个答案:

答案 0 :(得分:2)

查看这个答案,了解对弹簧MVC控制器的ajax JSON POST调用的demo工作,返回JSON响应(使用Spring 3.2.1.RELEASE)。

使用chrome调试工具或Firebub,确保HTTP请求包含:

Content-Type: application/json

类路径上需要这两个jackson jar,请参阅演示pom.xml

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
  </dependency>

  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
  </dependency>

确保@Controllerscanned correctly,它应该说明是否已在日志中初始化。

答案 1 :(得分:0)

我必须添加

<mvc:annotation-driven/>`

到我的Spring Context。现在一切正常。