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