程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何反序列化日期“2017-01-01T00:00:59.000UTC”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何反序列化日期“2017-01-01T00:00:59.000UTC”?

开发过程中遇到如何反序列化日期“2017-01-01T00:00:59.000UTC”的问题如何解决?下面主要结合日常开发的经验,给出你关于如何反序列化日期“2017-01-01T00:00:59.000UTC”的解决方法建议,希望对你解决如何反序列化日期“2017-01-01T00:00:59.000UTC”有所启发或帮助;

尝试使用 Json 文件中的特定模式反序列化日期。
我想从 Json 文件接收的对象:

@Data
public class MyClass {
  @datetiR_927_11845@eFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'UTC'")
  @JsonDeserialize(using = LocaldatetiR_927_11845@eDeserializer.class)
  private LocaldatetiR_927_11845@e date;
}

Json 文件:

{
  "date" : "2017-01-01T00:00:59.000UTC"
}

代码示例我想如何接收它:

ObjectMapper mapper = new ObjectMapper();
MyClass clazz = mapper.readValue(new file("Myfile.Json"),MyClass.class);

实际结果:

com.fasterxml.jackson.databind.exc.InvalIDFormatException: 
CAnnot deserialize value of type `java.time.LocaldatetiR_927_11845@e` from String "2017-01-01T00:00:59.000UTC":
Failed to deserialize java.time.LocaldatetiR_927_11845@e: (java.time.format.datetiR_927_11845@eParseException) 
Text '2017-01-01T00:00:59.000UTC' Could not be parsed,unparsed text found at index 23
at [source: (filE); line: 2,column: 11] (through reference chain: com.example.MyClass["date"])

如何反序列化当前日期模式?

解决方法

您的日期格式不正确(UTC 作为文本简单附加),但您可以通过自定义格式化程序解决它。

public class Test {

  public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    MyClass localdatetiR_927_11845@e = objectMapper.readValue("{\"date\":\"2017-01-01T00:00:59.000UTC\"}",MyClass.class);
    System.out.println(localdatetiR_927_11845@e.datE);
  }

  @Data
  public static class MyClass {
    @JsonDeserialize(using = CustomDeserializer.class)
    private LocaldatetiR_927_11845@e date;

  }

  public static class CustomDeserializer extends LocaldatetiR_927_11845@eDeserializer {

    public CustomDeserializer() {
      super(datetiR_927_11845@eFormatter.ISO_LOCAL_date_time);
    }

    protected CustomDeserializer(LocaldatetiR_927_11845@eDeserializer base,Boolean leniency) {
      super(base,leniency);
    }

    @Override
    public LocaldatetiR_927_11845@e deserialize(JsonParser jsonParser,DeserializationContext deserializationContext) throws IOException,JsonProcessingException {
      String subString = jsonParser.getText().subString(0,jsonParser.getText().indexOf("U"));
      return LocaldatetiR_927_11845@e.parse(subString,_formatter);
    }
  }

}
,

您使用的日期格式不正确。

代替:yyyy-MM-dd'T'HH:mm:ss.SSS'UTC'

应该是:yyyy-MM-dd'T'HH:mm:ss.SSSz

其次,需要使用@JsonFormat来指定日期格式。

@JsonFormat 在 jackson-databind 包中定义,可让您更好地控制如何根据 SimpleDateFormat 格式化日期和日历值。

通过使用它,POJO @H_855_6@myClass 看起来像这样

@Data
public class MyClass {
  @JsonFormat(shape = JsonFormat.Shape.StriNG,pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSz",timezone = "UTC")
  @JsonDeserialize(using = LocaldatetiR_927_11845@eDeserializer.class)
  private LocaldatetiR_927_11845@e date;
}

现在,如果您尝试使用以下方法进行反序列化:

ObjectMapper mapper = new ObjectMapper();
MyClass clazz = mapper.readValue(new File("MyFile.json"),MyClass.class);
System.out.println(myClass);

然后这个过程会继续,产生这样的结果:

@H_855_6@myClass{date=2017-01-01T00:00:59.000}
,

尝试删除 @JsonDeserialize。 (在任何情况下,您都试图将日期反序列化为 LocaldatetiR_927_11845@e 但它有时区信息,您需要尝试 ZoneddatetiR_927_11845@e 或 OffsetdatetiR_927_11845@e)。并换行

@datetiR_927_11845@eFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'UTC'")

@JsonFormat(shape = JsonFormat.Shape.StriNG,pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")

这是为您提供完整答案的问题的链接:Spring Data JPA - ZoneddatetiR_927_11845@e format for json serialization

大佬总结

以上是大佬教程为你收集整理的如何反序列化日期“2017-01-01T00:00:59.000UTC”全部内容,希望文章能够帮你解决如何反序列化日期“2017-01-01T00:00:59.000UTC”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: