背景说明:该项目已配置以下内容,只不过RocketMQ内块没有弄
class LocalDateTimeJsonSerializer extends JsonSerializer<LocalDateTime> {
LocalDateTimeJsonSerializer() {
}
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (Objects.nonNull(value)) {
long time = value.toInstant(ZoneOffset.ofHours(8)).toEpochMilli() / 1000L;
gen.writeNumber(time);
}
}
}
class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
LocalDateTimeDeserializer() {
}
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
long time = p.getLongValue();
if (time < 1L) {
return null;
} else {
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(time, 0, ZoneOffset.ofHours(8));
return localDateTime;
}
}
}
于是在我发消息的时候就报错,不支持LocalDateTime的序列化,于是,俺想了想,就将LocalDateTime相关的字段加上了这两个注解:
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
但是,自从我加了这两个字段,他居然直接报错了…我就发现这个问题俺可能解决不了…聪明的我就去请教大佬了…
问题原因:
因为大佬写的lLocalDateTime序列化,首先是把时间转成秒值,但是我在传参的时候传的就是秒值(1641801601
),导致该注解的字段赋值的时候就出现问题,如果我直接传2022-01-10T17:52:26.648527
这种格式的,是完全没有问题的。
于是乎,最终的解决方案:
为了方便前端,我需要先用一个不带注解的DTO去接受参数,然后再将不带注解的DTO转换成带注解的DTO,此问题暂时解决。