java - 如何动态自定义日期格式的反序列化器?

标签 java json json-deserialization localdate

我正在开发自定义 JSON 反序列化器并具有以下类

public class yyyy_MM_dd_DateDeserializer extends StdDeserializer <LocalDate> {

 public yyyy_MM_dd_DateDeserializer() {
  this(null);
 }

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

 @Override
 public LocalDate deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
  String dateString = jsonParser.getText();
  LocalDate localDate = null;
  try {
   localDate = LocalDate.parse(dateString, "yyyy-MM-dd");
  } catch (DateTimeParseException ex) {
   throw new RuntimeException("Unparsable date: " + dateString);
  }
  return localDate;
 }
}

在我的请求类中

@Valid
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate endDate;

它工作正常,但我想知道是否可以动态传递日期格式。而不是在 yyyy_MM_dd_DateDeserializer 中进行硬编码。 我想从请求类传递日期格式,以便我的反序列化器更加通用,任何人都可以通过发送所需的格式来使用它。

最佳答案

我认为你太努力了,无法得到你想要的东西。有一种更简单的方法,无需编写自己的解串器。看this question 。本质上它看起来像

@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="EEE MMM dd HH:mm:ss Z yyyy")
@JsonProperty("created_at") 
ZonedDateTime created_at;

你只需戴上自己的面具即可。另外,我曾经有一个解析未知格式日期的任务,本质上我需要解析任何有效的日期。这是一篇描述如何实现它的想法的文章:Java 8 java.time package: parsing any string to date 。您可能会发现它很有用

关于java - 如何动态自定义日期格式的反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54855044/

相关文章:

javascript - Angular 2 : SyntaxError: JSON. 解析:JSON 数据第 1 行第 1 列出现意外字符

arrays - 通过 json2typescript 反序列化 json 时出错

java - 如何使用 Jackson 的本地化小数点分隔符反序列化浮点值

java - 如何删除 Atmosphere 广播

iphone - RestKit mapKeyPath 到数组索引

c# - C# 有办法给我一个不可变的字典吗?

javascript - 如何解析远程服务器返回的JSONP数据

C# JSON 反序列化 : Type is an interface or abstract class and cannot be instantiated

java - 如何通过套接字将 double 或任何其他随机类型从 Java 传递到 C++?

java - 使用 Intellij 2016 创建 Jar - 没有主要 list 属性