boot -LocalDateTime 序列化和反序列化时间戳
在和前端规范时间传值时间,通过时间戳进行交互
自定义序列化和反序列化
public class LDTConfig {
/**
* localdatetime 序列化成 13 位时间戳
*/
public static class CmzLdtSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen,
SerializerProvider serializers) throws IOException {
gen.writeNumber(value.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());
}
}
/**
* 将 13 位时间戳转成 localdatetime
*/
public static class CmzLdtDeSerializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p,
DeserializationContext ctxt) throws IOException, JsonProcessingException {
Long timestamp = p.getLongValue();
return LocalDateTime.ofEpochSecond(timestamp / 1000, 0, ZoneOffset.ofHours(8));
}
}
}
示例
@Data
public class UserQuery {
@JsonDeserialize(using = LDTConfig.CmzLdtDeSerializer.class)
private LocalDateTime startTime;
}
@Data
public class UserResp {
@JsonSerialize(using = LDTConfig.CmzLdtSerializer.class)
private LocalDateTime createdTime;
}
@RestController
public class DateTimeController {
@PostMapping("/hello")
public UserResp index(@RequestBody UserQuery query){
System.out.println(query);
UserResp userResp = new UserResp();
userResp.setCreatedTime(LocalDateTime.now());
return userResp;
}
}
转换成功!
good luck!