gpt4 book ai didi

java - Angular2 Spring启动日期序列化

转载 作者:太空狗 更新时间:2023-10-29 18:31:17 25 4
gpt4 key购买 nike

我正在制作一个带有 Angular2 前端的 REST API。在我的 jackson Spring 配置中,我设置了这个 spring.jackson.date-format=EEE MMM dd yyyy HH:mm:ss zzz (zzzz) 因为我使用了 bootstrap-datepicker 插件,它输出的日期如下这:2017 年 5 月 31 日星期三 00:00:00 GMT+0200(西欧夏令时)。当我尝试将日期发布到具有像这样的变量的 DTO 时 private Date defaultDatetime; REST API 返回 400 Bad request 错误。

{"timestamp":"mer. mai 03 2017 14:16:47",
"status":400,
"error":"Bad Request",
"exception":"org.springframework.http.converter.HttpMessageNotReadableException",
"message":"Could not read document: Can not construct instance of java.util.Date from String value '2017-05-01T22:00:00.000Z': not a valid representation (error: Failed to parse Date value '2017-05-01T22:00:00.000Z': Unparseable date: \"2017-05-01T22:00:00.000Z\")\n at [Source: java.io.PushbackInputStream@77b19daf; line: 1, column: 68] (through reference chain: ch.heigvd.form.api.dto.FormDTO[\"fields\"]->java.util.ArrayList[0]->ch.heigvd.form.api.dto.field.DateFieldDTO[\"defaultDate\"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of java.util.Date from String value '2017-05-01T22:00:00.000Z': not a valid representation (error: Failed to parse Date value '2017-05-01T22:00:00.000Z': Unparseable date: \"2017-05-01T22:00:00.000Z\")\n at [Source: java.io.PushbackInputStream@77b19daf; line: 1, column: 68] (through reference chain: ch.heigvd.form.api.dto.FormDTO[\"fields\"]->java.util.ArrayList[0]->ch.heigvd.form.api.dto.field.DateFieldDTO[\"defaultDate\"])",
"path":"/api/forms"}

知道我应该为 jackson 反序列化设置什么样的日期格式吗?或者我应该直接在前端更改格式?

更新

我让它与自定义序列化器一起工作。这是properties文件中的配置。

spring.jackson.date-format=ch.heigvd.form.configuration.CustomJsonDateDeserializer spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false

这是序列化器:

public class CustomJsonDateDeserializer extends ISO8601DateFormat {

@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
toAppendTo.append(format.format(date));
return toAppendTo;
}

@Override
public Date parse(String source, ParsePosition pos) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
return format.parse(source);
} catch (ParseException var4) {
return null;
}
}

}

最佳答案

您可以执行以下两个选项中的任何一个,选项1:由于它返回 ISOFormat,因此请编写您自己的解串器。

@JsonDeserialize(using=CustomerDateAndTimeDeserialize .class)
public class CustomJsonDateDeserializer extends JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonParser jsonparser,
DeserializationContext deserializationcontext) throws IOException, JsonProcessingException {

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String date = jsonparser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}

}
}

在任何地方注释每个 setter
@JsonDeserialize(using = CustomJsonDateDeserializer.class)

选项 2:更改您的格式以匹配 ISO 字符串格式。

spring.jackson.date-format=YYYY-MM-dd'T'HH:mm:ss.SSS'Z'

关于java - Angular2 Spring启动日期序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43763012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com