springmvc ajax 获取json 报错 406 的解决方案

使用的spring 版本都在4.3.5

使用的jackson版本2.8.5

使用的jackson maven 配置:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-parameter-names</artifactId>
    <version>${jackson.version}</version>
</dependency>

servlet配置:

<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="objectMapper" ref="objectMapper" />
</bean>
<bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter">
    <property name="objectMapper" ref="xmlMapper" />
</bean>
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>

<!-- 有时我们返回的字段存在null的情况我们需要对其进行处理,objectMapper提供了默认的几种处理方式配置如下 -->
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
</bean>
<bean id="xmlMapper" parent="objectMapper" p:createXmlMapper="true" />

 

遇到的问题

我使用ajax请求后台controller,

$.ajax({
    url:'/test-app/test/info.htm',
    data : {
    },
    type:'post',
    dataType:'json',
    success:function(data){
        alert(data)
    }
});

这个时候报错406

解决方案:

因为我在web.xml里面配置的spring 的servlet 拦截后缀名.htm结尾的请求,这样的话新版本的jackson默认是认为要返回text/html的格式,所以报错406了,最后修改为

<!-- spring mvc servlet -->
<servlet>
    <description>spring mvc servlet</description>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <description>spring mvc 配置文件</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.htm</url-pattern>
    <url-pattern>*.json</url-pattern>
</servlet-mapping>

这样同时拦截.htm和.json结尾的请求,然后ajax改为

$.ajax({
    url:'/test-app/test/info.json',
    data : {
    },
    type:'post',
    dataType:'json',
    success:function(data){
        alert(data)
    }
});

这样就可以正常返回json数据了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值