大佬教程收集整理的这篇文章主要介绍了如何反序列化日期“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,请注明来意。