当前位置: 首页 > 知识库问答 >
问题:

jackson日期格式转换

丁振海
2023-03-14

请帮助更改日期格式。

**源**json文件

**目标**员工对象

我需要支持将文件json日期转换为对象。来自文件

{
 "dateOfBirth": {
    "year": 1980,
    "month": "MAY",
    "monthValue": 5,
    "dayOfMonth": 4,
    "dayOfYear": 124,
    "dayOfWeek": "WEDNESDAY",
    "chronology": {
      "calendarType": "iso8601",
      "id": "ISO"
    },
    "era": "CE",
    "leapYear": false
  }
}

对象

{"dateOfBirth": "1980-05-04"}

对象

public class Employee {   
    private LocalDate dateOfBirth;
    //setter
    //getter
}

库“com.fasterxml.jackson.datatype:jackson-datatype-jsr310”

日期:<代码>java。时间本地日期

我的目标是从文件中读取json数据并将其映射到对象。

共有1个答案

华峰
2023-03-14

您可以使用自定义反序列化器。

public class EmployeeBirthDateDeserializer extends StdDeserializer<LocalDate> {

  public EmployeeBirthDateDeserializer() {
    super(LocalDate.class);
  }

  @Override
  public LocalDate deserialize(JsonParser parser, DeserializationContext context) throws IOException {
    JsonNode root = parser.getCodec().readTree(parser);
    return LocalDate.of(root.get("year").asInt(), root.get("monthValue").asInt(), root.get("dayOfMonth").asInt());
  }
}

然后使用@JsonDeseriize将其仅应用于员工中的dateOfBirth字段:

public class Employee {

  @JsonDeserialize(using = EmployeeBirthDateDeserializer.class)
  private LocalDate dateOfBirth;

  //getters and setter
}

测试:

public class Temp {

  public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    Employee employee = mapper.readValue(ClassLoader.getSystemResourceAsStream("strange-date.json"), Employee.class);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    System.out.println(formatter.format(employee.getDateOfBirth()));
  }
}

打印日期:1980-05-04。

 类似资料:
  • 我想用特定的格式序列化POJO的某些日历字段。 我将添加一个格式为字符串的字段,因为它实际上是以24小时为单位表示一天,而不是一个特定的时间瞬间。但当我添加带有注释的新字段时: 我希望得到这样的JSON: 相反,我遇到了以下例外情况:

  • 我在webmatrix上使用经典的asp完成这项工作 在我的数据库中,存储的日期格式为MM/DD/YYYY

  • 问题内容: 我有日期的字符串形式: 我想将其格式化为 我在用 但它不起作用。 我如何转换为? 问题答案: 试试这个 现在

  • 问题内容: 我收到的日期值是这样的JSON对象: 我想用Java代码将其解析为或作为。 我想知道什么是简单的方法。 问题答案: 我认为第一个数字()是自纪元以来的毫秒数,并且是时区。鉴于以下示例代码似乎是这种情况,它似乎可以满足您的要求。 以下代码使用Jackson解析JSON输入,如果您还没有选择的JSON解析库,我建议您这样做。它缺少错误检查等。 样例代码: 输出:

  • 问题内容: 我有django表单,我从POST收到一个格式为“%d /%m/%Y”的日期,我想将其转换为“%Y-%m-%d”,我该怎么办? 问题答案: 使用strptime和strftime: 同样,在Django模板语法中,您可以使用日期过滤器: 以您喜欢的格式打印日期。

  • 我想创建一个“yyyy-mm-dd hh:mm:ss”格式的日期对象。下面是我正在使用的代码。解析字符串后形成的日期对象不是所需的格式(预期为:2020-04-04 00:00:00,但实际为:Sat Apr 04 00:00:00 CDT 2020)。如何将日期转换为所需格式