我有以下Spring Controller
@Controller
@RequestMapping("/accreq")
使用以下映射和类似于org.springframework.samples.mvc.ajax.account.AvailabilityStatus
的文件,并带有一个额外的布尔字段someBooleanValue
@RequestMapping(value = "/defRoles", method=RequestMethod.GET)
public @ResponseBody AvailabilityStatus loadDefaultRoles(
@RequestParam(value="idGroup", required=false) String groupID {
我正在尝试使用以下jquery ajax
调用此方法$.getJSON("${pageContext. request. contextPath}/accreq/defRoles.htm", { idGroup: $('#infoGroup').val() }, function(availability) {
if (availability.someBooleanValue) {
//Do this
} else {
//Do else
}
});
正在执行Spring方法,但我收到了406
响应。我需要设置dataType
才能获得成功的回复?这种用法在Spring 3.1.4
下工作,现在它不适用于更高版本的Spring,例如3.2.4
或4.0.0
。总之,如何在Ajax响应中处理对象返回?
响应标头 - 406
错误
Request Headersview source
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
配置
<context:component-scan base-package="com.X" />
<mvc:annotation-driven />
<cache:annotation-driven />
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
...mapping for controller.....database etc
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="cache" value="true" />
<property name="order" value="1" />
</bean>
答案 0 :(得分:1)
在Spring 3.2中,对内容协商实现进行了彻底改革。有了它,引入了ContentNegotiationManager,并且还有一个事实,即路径优先于Accept-Header。 (在交叉浏览器兼容的方式中使用Accept-Header非常麻烦,因为不同的浏览器会发送不同的标题:s)。
正如我在其中一条评论the reference guide中提到的,清楚地记录了如何配置ContentNegotiationManager
。
以下内容应该解决问题
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
</bean>