SpringMVC用responsebody标签返回json的时候Error406

springmvc的好处就是能够用一个responsebody的标签直接将一个返回的对象转换成json
java

首先,须要配置spring,将如下的bean配置到spring的配置文件中web

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJacksonHttpMessageConverter" />  
            </list>  
        </property>  
    </bean>  
    <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>application/json;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean>

其中,MappingJasonHttpMessageConvert继承了AbstractHttpMessageConverter,其余的convert还有spring

ByteArrayHttpMessageConvertershell

StringHttpMessageConverterjson

ResourceHttpMessageConvertersession

SourceHttpMessageConverter<T>mvc

XmlAwareFormHttpMessageConverterapp

Jaxb2RootElementHttpMessageConverteride

MappingJacksonHttpMessageConverter这个convert能够支持类对象及Hashmap的转换this

咱们还须要配置对应的jakson的依赖,在pom中应该以下配置

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.4.1</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.4.1.1</version>
</dependency>
<dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-core-asl</artifactId>
   <version>1.9.13</version>
</dependency>

<dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-mapper-asl</artifactId>
   <version>1.9.13</version>
</dependency>

接下来在java中调用

@RequestMapping(value="getSearchResult.do")
@ResponseBody
public BaseJsonResult getSearchResult(HttpServletRequest request,
                                           HttpServletResponse response,
                                           HttpSession session,
                                           SearchParaDO searchParaDO) {
    try{
        String serachResultJsonString=service.getSeachResult(userMap, searchParaDO);
        SuccessJsonResult successJsonResult=new SuccessJsonResult(serachResultJsonString);
        return successJsonResult;
    }catch (Exception e){
        logger.error(e);
        FailureJsonResult failureJsonResult=new FailureJsonResult(e.getMessage(),e);
        return failureJsonResult;
    }
}

可是就是在前台正常调用的时候,返回了406的错误,网上找了不少相同的case基本上就是配置了以上的spring及jar包就能够解决了。

The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.

接下来继续分析,BaseJsonResult是我本身定义的一个抽象类,SuccessJsonResult和FailureJsonResult

其中定义了对应的filed,可是这些filed只是在继承类中作输出用,并无实现对应的get方法。固然这些filed访问控制的也是default的

这样当jakson将对应的对象转换为相应的json的获取不到对应的filed就没有转换成功。

那么将对应的field暴露出去应该能够解决转换失败的问题,因而有如下两种方法解决

1.将对应的filed改为public的访问控制

2.暴露public的get方法

因而解决了问题,前台能够正常获取到对应对象转换的json串了。

相关文章
相关标签/搜索