在MyBatis探究(五)——枚举类处理一文中,我们知道了如何在mybatis中使用枚举类型。这之后我们还需要正确处理与前端的交互,即正确处理枚举类型的序列化与反序列化操作。
本文将讨论如何在Jackson中处理枚举类型的序列化和反序列化。
默认情况下,Jackson会将Sex.MALE序列化成MALE,Sex.FEMALE序列化成FEMALE;反序列化时Sex.MALE只能接受MALE,Sex.FEMALE只能接受FEMALE。这不符合我们的需要,因此我们需要自定义序列化器和反序列化器。
序列化器
序列化器继承StdSerializer,重写serialize方法,向JsonGenerator中写入序列化后的值。
1 | public class BaseCodeEnumSerializer extends StdSerializer<BaseCodeEnum> { |
反序列化器
反序列化继承StdDeserializer,重写deserialize方法,根据JsonParser中的值返回反序列化后的值。
1 | public class BaseCodeEnumDeserializer<T extends BaseCodeEnum> extends StdDeserializer<T> { |
注册序列化器和反序列化器
1 | ObjectMapper mapper = new ObjectMapper(); |
新建SimpleModule,在SimpleModule中注册我们自定义的序列化和反序列化器,然后向ObjectMapper中注册module。
经过以上步骤,Jackson会将Sex.MALE序列化成1,Sex.FEMALE序列化成0;反序列化时Sex.MALE接受1,Sex.FEMALE接受0。结果符合我们的预期。