0

我有以下弹簧控制器

@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.4or 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>
4

1 回答 1

1

在 Spring 3.2 中,对内容协商实现进行了大修。有了它,引入了一个ContentNegotiationManager,并且还引入了路径优先于 Accept-Header 的事实。(以跨浏览器兼容的方式使用 Accept-Header 是相当痛苦的,因为不同的浏览器发送不同的标头:s)。

正如我在其中一条评论中提到的,参考指南清楚地记录了如何配置ContentNegotiationManager.

像下面这样的东西应该可以解决问题

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="favorPathExtension" value="false" />
</bean>
于 2013-09-02T12:40:10.093 回答