本文介绍 Fastjson 序列化与反序列化的几种实现方式。
Fastjson 序列化
- 通过@JSONField定制序列化
- 通过@JSONType定制序列化
- 通过SerializeFilter定制序列化
- 通过ParseProcess定制反序列化
1. 使用@JSONField配置
- 可以将
@JSONField
配置在字段或者getter/setter方法上。例如:public class VO { @JSONField(name="ID") private int id; }
- 或者
public class VO { private int id; @JSONField(name="ID") public int getId() { return id;} @JSONField(name="ID") public void setId(int value) {this.id = id;} }
2. 使用@JSONType配置
和JSONField类似,但JSONType配置在类上,而不是field或者getter/setter方法上。
3. 通过SerializeFilter定制序列化
通过SerializeFilter可以使用扩展编程的方式实现定制序列化。fastjson提供了多种SerializeFilter:
- PropertyPreFilter 根据PropertyName判断是否序列化
- PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
- NameFilter 修改Key,如果需要修改Key,process返回值则可
- ValueFilter 修改Value
- BeforeFilter 序列化时在最前添加内容
- AfterFilter 序列化时在最后添加内容
SerializeFilter filter = ...; // 可以是上面5个SerializeFilter的任意一种。
JSON.toJSONString(obj, filter);
4. 通过ParseProcess定制反序列化
定制反系列化API ParseProcess
Fastjson 反序列化
FastJson 提供了Spring MVC HttpMessageConverter的实现:
- FastJsonHttpMessageConverter for Spring MVC Below 4.2
- FastJsonHttpMessageConverter4 for Spring MVC 4.2+
可用于在Spring Controller中使用FastJson进行数据的Serialize and Deserialize。FastJsonConfig配置:
<bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig"> <!-- Default charset -->
<property name="charset" value="UTF-8" /> <!-- Default dateFormat -->
<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" /> <!-- Feature -->
<property name="features">
<list>
<value>Your feature</value>
</list>
</property> <!-- SerializerFeature -->
<property name="serializerFeatures">
<list>
<value>Your serializer feature</value>
</list>
</property> <!-- Global SerializeFilter -->
<property name="serializeFilters">
<list>
<ref bean="Your serializer filter"/>
</list>
</property> <!-- Class Level SerializeFilter -->
<property name="classSerializeFilters">
<map>
<entry key="Your filter class" value-ref="Your serializer filter"/>
</map>
</property>
</bean>
HttpMessageConverter配置
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <!-- MediaTypes -->
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property> <!-- FastJsonConfig -->
<property name="fastJsonConfig" ref="fastJsonConfig" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<mvc:default-servlet-handler />