mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-08 14:15:34 +08:00
refactor(json): OffsetDateTime 序列化统一秒精度, 移除纳秒小数
原 ISO_OFFSET_DATE_TIME 会按纳秒值输出 0-9 位小数 (如 .0546373), 对支付场景秒级足够, 且纳秒精度视觉混乱、增加字符串长度、不符行业惯例。 改用自定义 formatter 'yyyy-MM-dd'T'HH:mm:ssXXX' 强制秒精度无小数。 反序列化器仍兼容各种精度输入, 商户 SDK 不受影响。
This commit is contained in:
@@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter;
|
||||
/// # Java 8 时间类型格式定制模块
|
||||
///
|
||||
/// Jackson 3 内置了时间类型支持, 此模块仅覆盖默认的序列化格式
|
||||
/// OffsetDateTime -> yyyy-MM-ddTHH:mm:ssZ (UTC)
|
||||
/// OffsetDateTime -> yyyy-MM-ddTHH:mm:ssZ (UTC, 秒精度无小数)
|
||||
/// LocalDate -> yyyy-MM-dd
|
||||
/// LocalTime -> HH:mm:ss
|
||||
public class Java8TimeFormatModule extends SimpleModule {
|
||||
@@ -34,7 +34,11 @@ public class Java8TimeFormatModule extends SimpleModule {
|
||||
}
|
||||
|
||||
static class OffsetDateTimeToStringSerializer extends ValueSerializer<OffsetDateTime> {
|
||||
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
|
||||
// 秒精度 ISO 8601 偏移时间格式, 避免纳秒级精度输出 (如 .0546373) 造成视觉混乱与协议冗余
|
||||
// 支付场景秒级足够, 符合行业惯例 (Stripe / 微信支付 / 支付宝)
|
||||
private static final DateTimeFormatter FORMATTER =
|
||||
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
|
||||
|
||||
@Override
|
||||
public void serialize(OffsetDateTime value, JsonGenerator gen, SerializationContext ctxt) throws JacksonException {
|
||||
gen.writeString(value.withOffsetSameInstant(ZoneOffset.UTC).format(FORMATTER));
|
||||
|
||||
Reference in New Issue
Block a user