SpringMVC用responsebody标签返回json的时候Error406
SpringMVC用responsebody标签返回json的时候Error406
王小明123 发表于2年前
SpringMVC用responsebody标签返回json的时候Error406
  • 发表于 2年前
  • 阅读 626
  • 收藏 7
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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串了。

共有 人打赏支持
粉丝 143
博文 257
码字总数 295705
×
王小明123
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: