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

当我在浏览器中调用此URL时:

http://localhost:8080/app/foo.json 

Spring在此错误消息中响应406状态代码:

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

但是我已经定义了我的内容协商视图解析器,如下所示:

           

而我的控制器定义如下:

 @Controller @RequestMapping(value = "/foo") public class ToowootController { @RequestMapping(method = GET) @ResponseBody public FooDTO index() { // return fooDTO } } 

任何想法我做错了什么?

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

@ResponseBody和ContentNegotiatingViewResolver是同一件事的两种选择。 您通常使用其中一种,而不是两种。 如果要使用ContentNegotiatingViewResolver,请删除@ResponseBody。

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

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

示例配置

                @Controller @RequestMapping(value = "/foo") public class ToowootController { @RequestMapping(method = GET) @ResponseBody public ModelAndView index() { return new ModelAndView("xxxx", "Foo", FooDTO); } } 

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

ContentNegotiationManager解决了这个问题。 我用的是弹簧3.2。 我已经回答了,它为我工作,尤其是.json,请点击此处 。

我不确定这是否会解决它,但我确实发现你的代码有问题。 @ResponseBody注释应该在返回的项目之前,在本例中为FooDTO 。 我也希望你静态导入’RequestMethod.GET’。 否则你应该将’GET’改为’RequestMethod.GET’。 所以该方法应为:

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