在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
。结果符合我们的预期。