Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Jackson和RestTemplate将24小时日期字符串反序列化为LocalDate_Java - Fatal编程技术网

Java 如何使用Jackson和RestTemplate将24小时日期字符串反序列化为LocalDate

Java 如何使用Jackson和RestTemplate将24小时日期字符串反序列化为LocalDate,java,Java,我有以下几点 public static final String DATE_PATTERN = "yyyy-MM-dd'T'hh:mm:ss.SSSZ"; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN) private LocalDate created; return this.restTemplate.postForObject(url, entity, SearchResult.class);

我有以下几点

public static final String DATE_PATTERN = "yyyy-MM-dd'T'hh:mm:ss.SSSZ";
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN)
private LocalDate created;

return this.restTemplate.postForObject(url, entity, SearchResult.class);
java.time.DateTimeException: Invalid value for ClockHourOfAmPm (valid values 1 - 12): 13
    at java.base/java.time.temporal.ValueRange.checkValidValue(ValueRange.java:311) ~[na:na]
    at java.base/java.time.temporal.ChronoField.checkValidValue(ChronoField.java:717) ~[na:na]
当我运行代码时,它会出现以下错误

public static final String DATE_PATTERN = "yyyy-MM-dd'T'hh:mm:ss.SSSZ";
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN)
private LocalDate created;

return this.restTemplate.postForObject(url, entity, SearchResult.class);
java.time.DateTimeException: Invalid value for ClockHourOfAmPm (valid values 1 - 12): 13
    at java.base/java.time.temporal.ValueRange.checkValidValue(ValueRange.java:311) ~[na:na]
    at java.base/java.time.temporal.ChronoField.checkValidValue(ChronoField.java:717) ~[na:na]
如何将其反序列化为LocalDate?常规的Java7日期很好用

最终解决方案如下所示

public static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";

public class LocalDateDeserializer extends StdDeserializer<LocalDate>{
    protected LocalDateDeserializer(){
        super(LocalDate.class);
    }
    @Override
    public LocalDate deserialize(JsonParser parser, DeserializationContext context) throws IOException {
        return LocalDate.parse(parser.readValueAs(String.class), DateTimeFormatter.ofPattern(JiraService.DATE_PATTERN));
    }
}

public class LocalDateSerializer extends StdSerializer<LocalDate> {

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

    @Override
    public void serialize(LocalDate value, JsonGenerator generator, SerializerProvider provider) throws IOException {
        generator.writeString(value.format(DateTimeFormatter.ofPattern(JiraService.DATE_PATTERN)));
    }
}

@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate created;
public static final String DATE\u PATTERN=“yyyy-MM-dd'T'HH:MM:ss.SSSZ”;
公共类LocalDateDeserializer扩展StdDeserializer{
受保护的LocalDateDeserializer(){
super(LocalDate.class);
}
@凌驾
公共LocalDate反序列化(JsonParser解析器,反序列化上下文)引发IOException{
返回LocalDate.parse(parser.readValueAs(String.class),DateTimeFormatter.of模式(JiraService.DATE_模式));
}
}
公共类LocalDateSerializer扩展StdSerializer{
公共LocalDateSerializer(){
super(LocalDate.class);
}
@凌驾
public void serialize(LocalDate值、JsonGenerator生成器、SerializerProvider提供程序)引发IOException{
writeString(value.format(DateTimeFormatter.of模式(JiraService.DATE_模式));
}
}
@JsonDeserialize(使用=LocalDateDeserializer.class)
@JsonSerialize(使用=LocalDateSerializer.class)
创建私有LocalDate;

hh
适用于1-12小时格式,使用
hh
适用于0-23小时格式,请参阅文档。你需要:

public static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";

默认情况下,
SimpleDateFormat
Calendar
等较旧的类通过将日期向前移动溢出字段偏移量,以静默方式固定日期。这就是你不应该再使用它们的原因。

hh
用于1-12小时格式,使用
hh
用于0-23小时格式,请参阅文档。你需要:

public static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";

默认情况下,
SimpleDateFormat
Calendar
等较旧的类通过将日期向前移动溢出字段偏移量,以静默方式固定日期。这就是为什么您不应该再使用它们。

有没有更干净的方法来进行Jackson映射?@JGleason如果您使用的是Spring Boot或其他框架,您可能会得到一些现成的约定,例如ISO 8601格式。否则,你必须自己设置它。哼哼使用启动,但没有得到任何预加载。如果我不使用24小时,我想我可以使用LocalDate开箱即用。我尝试使用Jackson注释并声明DateTimeFormatter,但似乎不起作用。请检查Spring Boot属性中可用的
org.springframework.format.annotation.DateTimeFormat
annotation和Jackson属性。是否有更干净的方法来执行Jackson映射?@JGleason如果您使用的是Spring Boot或其他您可能会得到一些现成的约定,例如ISO 8601格式。否则,你必须自己设置它。哼哼使用启动,但没有得到任何预加载。如果我不使用24小时,我想我可以使用LocalDate开箱即用。我尝试使用Jackson注释并声明DateTimeFormatter,但似乎不起作用。请检查Spring Boot属性中的
org.springframework.format.annotation.DateTimeFormat
注释和Jackson属性。