您还可以使用 Dozer 映射将 POJO 转换为 Map 并排除字段。例如,如果我们有两个具有双向关系的类 PojoA 和 PojoB,我们定义这样的映射
<mapping map-id="mapA" map-null="false">
<class-a>com.example.PojoA</class-a>
<class-b>java.util.Map</class-b>
<field>
<a>fieldA</a>
<b>this</b>
</field>
<field map-id="mapB">
<a>pojoB</a>
<b>this</b>
<b-hint>java.util.Map</b-hint>
</field>
</mapping>
<mapping map-id="mapB" map-null="false">
<class-a>com.example.PojoB</class-a>
<class-b>java.util.Map</class-b>
<field-exclude>
<a>pojoA</a>
<b>this</b>
</field-exclude>
</mapping>
然后定义一个 bean,将上述推土机映射文件设置为属性。
<bean id="mapper" class="org.dozer.DozerBeanMapper">
<property name="mappingFiles">
<list>
<value>dozerMapping.xml</value>
</list>
</property>
</bean>
然后在你要序列化的类中
public class TestClass
{
@Autowired
DozerBeanMapper mapper;
public Map<String,Object> serializeObject(PojoA pojoA)
{
return ((Map<String, Object>) mapper.map(pojoA, Map.class, "mapA"));
}
}
推土机手册在这里。