jackson序列化问题
1:序列化的时候根据某个类进行特定的序列化
代码示例:
@RefreshScope
public class JsonCustomizerConfiguration {
@Value("${client.commons.response.convert.convertBooleanToNumber:true}")
private boolean convertBooleanToNumber;
private static final String format = "yyyy-MM-dd HH:mm:ss";
private final JsonSerializer<Boolean> booleanJsonSerializer = new JsonSerializer<Boolean>() {
@Override
public void serialize(Boolean aBoolean, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (convertBooleanToNumber) {
jsonGenerator.writeNumber(aBoolean ? 1 : 0);
} else {
jsonGenerator.writeBoolean(aBoolean);
}
}
};
private final JsonSerializer<LocalDateTime> localDateTimeJsonSerializer = new JsonSerializer<LocalDateTime>() {
@Override
public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(LocalDateTime.now().format(DateTimeFormatter.ofPattern(format)));
}
};
@Bean("jackson2ObjectMapperBuilderCustomizer")
@ConditionalOnMissingBean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder
.serializerByType(Boolean.class, booleanJsonSerializer)
.serializerByType(Boolean.TYPE, booleanJsonSerializer)
.serializerByType(Long.class, ToStringSerializer.instance)
.serializerByType(Long.TYPE, ToStringSerializer.instance)
.serializerByType(LocalDateTime.class, localDateTimeJsonSerializer)
.build();
}
}
2:序列化对象的时候不序列化空值
使用 @JsonInclude(value= JsonInclude.Include.NON_NULL)
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(value= JsonInclude.Include.NON_NULL)
public class BaseResponse {
private Integer code;
private String message;
private LocalDateTime timestamp;
private Long total;
private Object data;
}
3:springmvc 接收参数规定属性名大写
@JsonProperty(value = "Body")
private BodyParam Body;