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

jho*_*ini 3 java json jackson web spring-boot

我用 Spring Boot 开发了一个休息服务。我想返回一个 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;  

 . . .

    }
Run Code Online (Sandbox Code Playgroud)

目前的回应:

{
 . . .
"dateOfBirth":[2018,7,25,7,0],
. . . 
}
Run Code Online (Sandbox Code Playgroud)

首选回应:

{
 . . .
"dateOfBirth": 1532786354419,
. . . 
}
Run Code Online (Sandbox Code Playgroud)

saj*_*jib 6

使用@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;  

    . . .

}
Run Code Online (Sandbox Code Playgroud)

自定义序列化器类:

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()+"");
}
}
Run Code Online (Sandbox Code Playgroud)