org.springframework.web.HttpMediaTypeNotAcceptableException Spring MVC 4.2.5

时间:2016-03-23 20:48:32

标签: java json spring spring-mvc

我试图从我的Spring Controller获得json响应。我得到以下异常

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

我在pom.xml中有与jackson相关的jar,如下所示

<properties>
    <spring.version>4.2.5.RELEASE</spring.version>
    <jstl.version>1.2</jstl.version>
    <servletapi.version>2.5</servletapi.version>
    <jackson.version>2.6.3</jackson.version>
</properties>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

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

    <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-annotations</artifactId>
        <version>${jackson.version}</version>
    </dependency>

以下是我的控制器

    @ResponseBody
    @RequestMapping(value = "/getNodes.htm",produces="application/json")
    public List<NodeDTO> getNodes() {
...
return nodes;
}

我在浏览器中遇到406错误,在服务器日志中出现异常。我的浏览器正确发送Accept标头有application / json。但我仍然面临着这个问题。我经历了很多论坛,没有人解决我的问题。请帮我解决一下

1 个答案:

答案 0 :(得分:2)

您的@RequestMapping注释不正确,尤其是使用扩展程序.htm

应该是

@RequestMapping(value = "/getNodes.json",produces="application/json")

或者

@RequestMapping(value = "/getNodes",produces="application/json")

Spring MVC使用URL的扩展来标识要返回的内容类型。在您的情况下,您指定了.htm的扩展名,Spring将其解释为HTML。但是,这会与注释的produces属性冲突,后者指定JSON。

我不清楚Spring是如何处理冲突内容类型的,例如,如果您将.htm扩展名替换为.json或完全删除扩展名,那么您就不会# 39;不用担心。