spring web 4.1處理json
Spring mvc處理json,咱們都知道使用@ResponseBody,處理xml也是用此註解。若是想spring mvc的使用@ResponseBody註解處理json,咱們須要加入一些處理bean,也能夠使用默認spring提供的。
經過spring源碼RequestMappingHandlerAdapter類,咱們知道初始化的時候這些註解已經被加載進來,以下RequestMappingHandlerAdapter類的代碼以下:argumentResolvers和returnValueHandlers一個接受一個返回各自裝載不少處理,有興趣能夠研究源碼。
Java代碼
- @Override
- public void afterPropertiesSet() {
- if (this.argumentResolvers == null) {
- List<HandlerMethodArgumentResolver> resolvers = getDefaultArgumentResolvers();
- this.argumentResolvers = new HandlerMethodArgumentResolverComposite().addResolvers(resolvers);
- }
- if (this.initBinderArgumentResolvers == null) {
- List<HandlerMethodArgumentResolver> resolvers = getDefaultInitBinderArgumentResolvers();
- this.initBinderArgumentResolvers = new HandlerMethodArgumentResolverComposite().addResolvers(resolvers);
- }
- if (this.returnValueHandlers == null) {
- List<HandlerMethodReturnValueHandler> handlers = getDefaultReturnValueHandlers();
- this.returnValueHandlers = new HandlerMethodReturnValueHandlerComposite().addHandlers(handlers);
- }
- initControllerAdviceCache();
- }
言歸正傳,下面介紹處理json
spring配置文件以下:
Java代碼
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop.xsd"
- default-lazy-init="false">
-
- <!-- mvc:annotation-driven使用註解功能 -->
- <mvc:annotation-driven>
- <mvc:message-converters register-defaults="true">
- <!--json處理-->
- <bean
- class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
- <property name="supportedMediaTypes">
- <list>
- <value>application/json;charset=UTF-8</value>
- <value>text/html;charset=UTF-8</value>
- </list>
- </property>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
-
- <!-- 只掃描Controller 註解 -->
- <context:component-scan base-package="com.zx.web"
- use-default-filters="false">
- <context:include-filter type="annotation"
- expression="org.springframework.stereotype.Controller" />
- </context:component-scan>
-
- <!-- 動態資源訪問,默認使用其餘handlerAdapter解析 -->
- <mvc:resources mapping="/images/**" location="/images/" />
- <mvc:resources mapping="/js/**" location="/js/" />
- <mvc:resources mapping="/css/**" location="/css/" />
-
-
- <!-- jsp視圖 -->
- <bean id="jspViewResolver"
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass"
- value="org.springframework.web.servlet.view.JstlView" />
- <property name="prefix" value="/jsp/" />
- <property name="suffix" value=".jsp" />
- <property name="order" value="0" />
- </bean>
-
-
- </beans>
我使用的是spring自帶的類MappingJackson2HttpMessageConverter處理,在spring4.1之前都是使用MappingJacksonHttpMessageConverter類處理,在spring4.1之後都是用MappingJackson2HttpMessageConverter處理,然而換了類,天然依賴的jackson也進行升級了,spring4,1之後使用jackson-annotations-2.5.0.jar,jackson-core-2.5.0.jar,jackson-databind-2.5.0.jar
Controller層代碼以下:
Java代碼
- package com.zx.web;
-
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- import com.zx.entity.User;
-
- @org .springframework.web.bind.annotation.RestController
- public class RestController {
-
- @RequestMapping("/rest")
- @ResponseBody
- public User getUser()
- {
- User user = new User();
- user.setName("nihao");
- user.setAddress("anhui");
- user.setAge("89");
- user.setWork("軟件");
-
- return user;
- }
- }
結果以下:
歡迎關注本站公眾號,獲取更多信息