文档章节

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

zimingforever
 zimingforever
发布于 2016/02/03 18:35
字数 510
阅读 636
收藏 7

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

首先,需要配置spring,将以下的bean配置到spring的配置文件中

<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还有

ByteArrayHttpMessageConverter

StringHttpMessageConverter

ResourceHttpMessageConverter

SourceHttpMessageConverter<T>

XmlAwareFormHttpMessageConverter

Jaxb2RootElementHttpMessageConverter

MappingJacksonHttpMessageConverter这个convert可以支持类对象及Hashmap的转换

我们还需要配置对应的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串了。

© 著作权归作者所有

共有 人打赏支持
zimingforever
粉丝 143
博文 264
码字总数 300408
作品 0
杭州
程序员
【转】Ajax响应中文乱码 [SpringMVC使用@ResponseBody处理Ajax请求]

Spring3.0 MVC @ResponseBody 的作用是把返回值直接写到HTTP response body里。 Spring使用AnnotationMethodHandlerAdapter的handleResponseBody方法, AnnotationMethodHandlerAdapter使用r......

一堆BUG
2013/09/10
0
0
Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点的 json 报文 问题 问题描述起来比较拗口,其实就是用Spring MVC时,如何将对象映射成 json 报文时不把对象作为json的...

Tek_Eternal
2015/03/01
0
1
Spring的ResponseBody和RestController注解返回的json数据不是json字符串,而是json对象

今天在上班的时候,因为要涉及到springmvc写json接口,通过ajax写数据到前端,然后就发现一个很神奇的事情。 当我使用@RestController或者@ResponseBody的时候,前端拿到的数据如下图: 很显...

一滴水的坚持
07/14
0
0
Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案

其实前面一篇关于zTree返回JSON数据的文章已经有一种解决方案了,但是当我今天在新公司搭建新环境的时候,发现决然又不行了,所以我觉得那应该不是最优的解决方案。 说起来,我以前接触到的一...

十月阳光
2015/07/28
0
1
spring mvc Ajax 的运用以及遇到的问题

Spring mvc 3.x版本,在支持Ajax方面还是不错的,看文档我们发现,只要我们在Controller里添加@RequestBody 和@ResponseBody两个标签后,就能把前台传过来的JSON对象进行转换成我们的java对象...

Line
2014/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
6
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
14
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部