首先是配置spring-servlet.xml(對springmvc配置)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 啓動Spring的支持註解 -->
<context:annotation-config/>
<mvc:annotation-driven />
<!-- 設置當前項目的根包 ,掃描有註解文件的包-->
<!--
ATTENTION!! 對於springMVC,要求配置子容器spring-servlet.xml用於配置@Controller
所以在這裏忽略掃描Controller,特別要注意,子容器的掃描會覆蓋掉父容器springContext.xml
的掃描配置所以在spring-servlet.xml中需要忽略掃描@Service,不然的話會覆蓋掉父容器對
@Service的事務增強配置,導致事務無效...........................................
-->
<context:component-scan base-package="com">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
<!-- 用於過濾靜態文件如css js jpg png等 -->
<mvc:default-servlet-handler/>
<!-- Spring MVC視圖分解器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- ajax json -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" />
<ref bean="stringHttpMessageConverter" />
</list>
</property>
</bean>
<!-- ajax json -->
<span style="color:#ff0000;"> <bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean></span>
<!-- ajax返回utf8 -->
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter" >
<property name = "supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- <mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
-->
<!-- SpringMVC中的上傳文件配置,在這裏配置上傳文件大小限制不夠靈活,建議使用jQuery框架來配置,這樣可以節省服務器的壓力 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
<property name="maxUploadSize" value="10485760000"/>
<property name="maxInMemorySize" value="40960"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
<!-- 異常處理類
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<value>error</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">/error/error</prop>
<prop key="java.lang.RuntimeException">/error/error</prop>
</props>
</property>
</bean>
-->
</beans>
@Entity
@Table(name = "department", catalog = "sqlhw_company")
public class Department implements java.io.Serializable {
// Fields
private Integer id;
private String DNo;
private String DName;
@JsonManagedReference
private Set<Manager> managers = new HashSet<Manager>(0);
............
}
@Entity
@Table(name = "manager", catalog = "sqlhw_company")
public class Manager implements java.io.Serializable {
// Fields
private Integer id;
@JsonBackReference
private Department department;
..................
}
但是如果很多時候,我們返回一個JSON,對於需要哪些字段並不是固定的,例如我有時候我將Department轉換成JSON的時候不需要managers這個字段,但是有時候又需要,所以要寫一個過濾器
public class WriteJsonUtil {
public WriteJsonUtil() {
}
//忽略ignoreNames的屬性
public static String writeJSON(Object obj, String [] ignoreNames) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(Object.class, PropertyFilterMixIn.class);
FilterProvider filters = new SimpleFilterProvider().
addFilter("IgnorePropertyByName", SimpleBeanPropertyFilter.serializeAllExcept(ignoreNames));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mapper.setDateFormat(df);
ObjectWriter writer = mapper.writer(filters);
return writer.writeValueAsString(obj);
}
@JsonFilter("IgnorePropertyByName")
class PropertyFilterMixIn {}
}
ignoreNames就是要過濾的字段