在如今的springcloud作为主流的分布式开发技术,不能避免使用到远程调用,那么在与前端交互的过程中必须要使用序列化与反序列化。那么在序列化的过程中可能会发现类型不匹配的问题。
示例:手动处理Long类型序列化
1:首先先写工具类,定义LongJsonSerializer和LongJsonDeserializer
public class LongJsonSerializer extends JsonSerializer<Long> {
public static final LongJsonSerializer instance = new LongJsonSerializer();
public LongJsonSerializer() {
}
/*
* JsonGenerator:用来生成Json格式的内容的
* SerializerProvider:管理具有自己专用序列化格式的插件
* */
@Override
public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String text = value==null?null:String.valueOf(value);
if(text !=null){
jsonGenerator.writeString(text);
}
}
}
public class LongJsonDeserializer extends JsonDeserializer<Long> {
private static final Logger log = LoggerFactory.getLogger(LongJsonDeserializer.class);
public static final LongJsonDeserializer instance = new LongJsonDeserializer();
public LongJsonDeserializer() {
}
@Override
public Long deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
String value = jsonParser.getText();
try {
return StringUtils.isEmpty(value) ? null : Long.parseLong(value);
} catch (NumberFormatException var5) {
log.error("数据转换异常", var5);
return null;
}
}
}
最后在实体类添加上注解
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
@JsonSerialize(using = LongJsonSerializer.class)
@JsonDeserialize(using = LongJsonDeserializer.class)
private Long id;
private String name;
private Integer age;
private String email;
}