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 }