Spring Error:只能根据请求产生具有不可接受特性的响应"接受"头

时间:2015-08-13 08:38:02

标签: java spring maven spring-mvc

我使用spring构建Restful API,当我访问下面的方法时:

// get the entity in DB by using id number
    @RequestMapping(value = "/{id:.+}", method = RequestMethod.GET)
    public @ResponseBody
    User getEmployee(@PathVariable("id") String email) {
        User user=null;
        System.out.println(email);
        try {
            user = dataServices.getEntityById(email);

        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(user.getNickname());
        return user;
    }

使用此网址:http://localhost:8080/RestCrud/user/richard_johnson@sina.com

它得到406错误:

enter image description here

我确定已添加

<mvc:annotation-driven />

在我的spring-config.xml中。 enter image description here

我也确定我在pom.xml中添加了那些jackson依赖项

enter image description here

********************编辑************************** ***********

enter image description here

********************再次编辑************************* ******

正如您所看到的,我没有限制@RequestMapping注释中的标题,因此我不认为它是与标题限制相关的问题。

另外,我的网址模式如下:

enter image description here enter image description here

http://localhost:8080/RestCrud/user/id

我测试过&#34;列表&#34; http://localhost:8080/RestCrud/user/list

它有效,但&#34; id&#34;路径不

2 个答案:

答案 0 :(得分:1)

好像你已经注释掉了一些jackson依赖项 发生错误的原因是您的员工对象无法转换为浏览器可接受的格式。你definitley本想回应json。

Spring 4需要以下jackson libs

  • jackson-core
  • jackson-core-sal
  • 杰克逊映射器-ASL
  • 杰克逊数据绑定

更新:

查看您的网址格式, *。com 扩展程序正在推动spring执行内容协商,而不是验证接受标头。

您可以使用

强制Spring不基于路径扩展进行内容协商
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="favorPathExtension" value="false" />
</bean>

答案 1 :(得分:0)

查看at this answer,简而言之,如果您使用的是Spring 4,请确保包含jackson-corejackson-databind依赖项