Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java.util.Date转换为json格式_Java_Json_Spring Boot_Jackson_Resteasy - Fatal编程技术网

将java.util.Date转换为json格式

将java.util.Date转换为json格式,java,json,spring-boot,jackson,resteasy,Java,Json,Spring Boot,Jackson,Resteasy,我必须将POJO转换为JSON字符串才能发送到客户端代码 然而,当我这样做时,POJO中的java.util.Date字段(值为“2107-06-05 00:00:00.0”)会被翻译为“149659200000”,我认为这是一个自大纪元以来的时间。我希望它在Json中更具可读性,可能是'DD/MM/YYYY'格式 我在Spring Boot应用程序中使用RestEasycontroller,它处理Java对象到JSON的转换 有什么问题吗?RestEasy通过Jackson支持JSON,因此您

我必须将POJO转换为JSON字符串才能发送到客户端代码

然而,当我这样做时,POJO中的
java.util.Date
字段(值为“
2107-06-05 00:00:00.0
”)会被翻译为“
149659200000
”,我认为这是一个自大纪元以来的时间。我希望它在Json中更具可读性,可能是'DD/MM/YYYY'格式

我在Spring Boot应用程序中使用
RestEasy
controller,它处理Java对象到JSON的转换


有什么问题吗?

RestEasy通过Jackson支持JSON,因此您可以通过多种方式处理
Date
序列化

1. @JsonFormat注释 如果您想格式化特定字段,只需向POJO添加注释即可

public class TestPojo {

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
    public Date testDate;
}
2.杰克逊酒店 如果要全局设置
日期
序列化格式,则必须调整Jackson配置属性。例如,对于
application.properties
文件格式

第一个选项禁用将日期写入时间戳:

第二个定义了日期格式:

spring.jackson.date-format=dd-MM-yyyy
或者,对于
application.yml
文件格式:

spring:
  jackson:
    date-format: "dd-MM-yyyy"
    serialization:
      write_dates_as_timestamps: false
3.自定义序列化程序 如果你想完全控制序列化,你必须实现一个自定义的


您是否考虑使用日期格式化程序,例如SimuleDead格式?张贴代码…@ AksayLokur.我认为您可以用“代码> JsonFormat”(Prime= JSONFrast.Hopy.Script,模式= YYYY MM)注释POJO字段。dd@HH:mm:ss.SSSZ”)或使用
mapper.disable设置jackson objectmapper(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
如果您希望它在全球范围内工作,请注意这两种格式是不同的:时间戳是瞬间,即时间线上的一个点。DD/mm/yyyy是本地日期,即24小时(通常)很长的一段时间,它只能与给定时区的时间戳相关。您的应用程序可能需要一个或另一个时间戳,但不要认为它们是等效的。@jan.vdbergh这完全取决于您试图表示的内容:如果您表示某件事情发生的时间,例如日志事件,则时间戳是正确的。如果您不是试图表示人类输入的日期,例如生日,时间戳是不正确的:您的生日不会因为您旅行到不同的时区而改变。
spring:
  jackson:
    date-format: "dd-MM-yyyy"
    serialization:
      write_dates_as_timestamps: false
public class CustomDateSerializer extends StdSerializer<Date> {

    private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");

    public CustomDateSerializer() {
        this(null);
    }

    public CustomDateSerializer(Class t) {
        super(t);
    }

    @Override
    public void serialize(Date date, JsonGenerator generator, SerializerProvider provider) 
        throws IOException, JsonProcessingException {

        generator.writeString(formatter.format(date));
    }
}
public class TestPojo {

    @JsonSerialize(using = CustomDateSerializer.class)
    public Date testDate;
}