由于我不发送任何时区,杰克逊将UTC作为默认时区,但当去中心化时,它将偏移CST(我的本地时间)作为结果,我的代码中的日期(11/27/2020)落后一天
进口java.util.Date;
@JsonFormat(pattern = "MM/dd/yyyy")
private Date dispOn;
我如何将相同的日期发送到我的代码中
正如Andreas在评论中提到的,从Date更改为LocalDate就足够了。有关更多信息,我使用LocalDateTime向您展示了如何配置格式。我还在类级别使用Lombok的注释进行日志记录和getter/setter生成。请记住,LocalDate和LocalDateTime仅从Java8开始可用。
下面是一个完整的DTO示例,我在其中解析JSON
@Slf4j
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true) // optional annotation
public class MyMessage implements Deserializer<MyMessage> {
@JsonProperty("EVENT_TIMESTAMP")
@JsonFormat(shape = JsonFormat.Shape.STRING,
pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime eventTimestamp;
@JsonProperty("MESSAGE")
private String message;
@Override
public void configure(Map<String, ?> configs, boolean isKey) {
Deserializer.super.configure(configs, isKey);
}
@Override
public MyMessage deserialize(String s, byte[] bytes) {
ObjectMapper mapper = new ObjectMapper();
MyMessage event = null;
try {
event = mapper
.registerModule(new JavaTimeModule())
.readValue(bytes, MyMessage.class);
} catch (Exception e) {
log.error("Something went wrong during the deserialization of the MyMessage: {}", e.getMessage());
}
return event;
}
@Override
public MyMessage deserialize(String message, Headers headers, byte[] data) {
return Deserializer.super.deserialize(message, headers, data);
}
@Override
public void close() {
Deserializer.super.close();
}
我要发送的JSON:
{
"EVENT_TIMESTAMP": "2022-03-15T14:14:05.945",
"MESSAGE": "Test 123"
}