需求:通过HTTP方式对接三方系统的时候,本方业务系统传输字段或字段内部与第三方字段名不一值,需要过滤、转化等操作,希望通过注解的方式 + fastjson过滤器来简化实现业务需求。
现实思路如下:
首先要了解下SerializeFilter这个接口是通过编程扩展的方式定制序列化。
fastjson支持6种序列化方式,用于不同业务场景的定制化需求,都是基于SerializeFilter接口的封装。
PropertyPreFilter 根据PropertyName判断字段是否序列化
PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
NameFilter 修改Key,如果需要修改Key,process返回值则可
ValueFilter 修改Value
BeforeFilter 序列化时在最前添加内容
AfterFilter 序列化时在最后添加内容
案例:
业务表单需要传oa审批,oa表单字段少于业务表单并且字段名不一样,如果通过注解方式实现,过滤与转换字段名称。
第一步,自定义注解OaProperty
import java.lang.annotation.*;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface OaProperty {
/**oa字段名称*/
String field() default "";
}
第二,实现fastjson自定义过滤器,