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

相關文章
相關標籤/搜索