Java Spring MVC错误:此请求标识的资源只能生成响应

Java Spring MVC错误:此请求标识的资源只能生成响应,java,spring,spring-mvc,Java,Spring,Spring Mvc,在浏览器中调用此URL时: http://localhost:8080/app/foo.json Spring响应此错误消息中的406状态代码: 此请求标识的资源只能根据请求“accept”头()生成具有不可接受特征的响应 但是,我对内容协商视图解析器的定义如下: <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="favo

在浏览器中调用此URL时:

http://localhost:8080/app/foo.json
Spring响应此错误消息中的406状态代码:

此请求标识的资源只能根据请求“accept”头()生成具有不可接受特征的响应

但是,我对内容协商视图解析器的定义如下:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="favorPathExtension" value="true" />
    <property name="ignoreAcceptHeader" value="true" />

    <property name="mediaTypes">
        <map>
            <entry key="json" value="application/json"/>
            <entry key="html" value="text/html"/>
        </map>
    </property>
</bean>
@Controller
@RequestMapping(value = "/foo")
public class ToowootController {

    @RequestMapping(method = GET)
    @ResponseBody
    public FooDTO index() {
        // return fooDTO
    }

}

你知道我做错了什么吗?

我不确定这是否能解决问题,但我确实发现你的代码有问题。
@ResponseBody
注释应位于返回的项目之前,在本例中为
FooDTO
。另外,我希望您静态导入'RequestMethod.GET'。否则,您应该将“GET”更改为“RequestMethod.GET”。因此,该方法应为:

@RequestMapping(method = RequestMethod.GET)
    public @ResponseBody FooDTO index() {
        // return fooDTO
    }

当您使用网站返回控制器或视图名称时,ContentNegotingViewSolver将根据各种标准选择正确的数据表示策略

因此,您不仅可以返回对象DTO

示例配置

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="order" value="1" />
   <property name="mediaTypes">
    <map>
      <entry key="json" value="application/json" />
      <entry key="xml" value="application/xml" />
    </map>
  </property>
  <property name="defaultViews">
    <list>
       <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"            />
    </list>
  </property>
 <property name="ignoreAcceptHeader" value="true" />
</bean>


@Controller
@RequestMapping(value = "/foo")
public class ToowootController {

    @RequestMapping(method = GET)
    @ResponseBody
    public ModelAndView index() {

        return new ModelAndView("xxxx", "Foo", FooDTO);
    }
 }

@控制器
@请求映射(value=“/foo”)
公共类TooootController{
@RequestMapping(方法=GET)
@应答器
公共模型和视图索引(){
返回新的模型和视图(“xxxx”,“Foo”,FooDTO);
}
}

扩展将告诉Spring返回数据时要使用的内容类型。

看起来问题在于我没有添加所有必要的依赖项,在本例中是
jackson mapper asl
。我认为只添加jackson core asl就足够了。

@ResponseBody和ContentNegotingViewResolver是同一事物的两个备选方案。您通常使用其中一个,而不是两个。如果要使用ContentNegotingViewResolver,请删除@ResponseBody。

ContentNegotiationManager可解决此问题。我正在使用Spring3.2。我已经回答了,它对我有用,特别是对于.json,请检查

不,不幸的是,这没有改变任何事情。将
@ResponseBody
放在返回类型之前只是一种“样式”,否则Java目前不支持对方法返回类型进行注释。是的,我已经静态导入了
RequestMethod.GET