Java Spring MVC错误:此请求标识的资源只能生成响应
在浏览器中调用此URL时: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
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
。