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