SpringBoot-如何为“java.time.LocalDateTime”类创建自定义序列化?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (554)

我用SpringBoot开发了一个REST服务。我希望以毫秒的形式返回用户生日的json响应。如何序列化java.time.LocalDateTime对象设置为毫秒?

我的模型类:

    @Entity(name = "users")
    public class User implements Serializable {

        @Id
        @GeneratedValue
        @Column(name = "user_id")
        private Long id;

        @Column(name = "first_name")
        private String firstName;

        @Column(name = "last_name")
        private String lastName;



        @Column(name = "date_of_birth")
        private LocalDateTime dateOfBirth;  

 . . .

    }

目前的响应:

{
 . . .
"dateOfBirth":[2018,7,25,7,0],
. . . 
}

想要的响应:

{
 . . .
"dateOfBirth": 1532786354419,
. . . 
}
提问于
用户回答回答于

使用@JsonSerialize(using = CustomSerializer.class)

@Entity(name = "users")
public class User implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private Long id;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;


    @JsonSerialize(using = CustomSerializer.class)
    @Column(name = "date_of_birth")
    private LocalDateTime dateOfBirth;  

    . . .

}

自定义serilizer类:

public class CustomSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    //add your custom date parser
    gen.writeString(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()+"");
}
}
用户回答回答于

为什么不按以下方式存储Date属性:

@Temporal(TemporalType.TIMESTAMP)
private Date date = new Date();

它以毫秒为单位给出日期。将其格式化到所需的输出,这个输出是应用层的责任。不要在实体本身上做一些注释。

扫码关注云+社区

领取腾讯云代金券