Spring boot LocatDateTime的Spring引导Bean验证

Spring boot LocatDateTime的Spring引导Bean验证,spring-boot,bean-validation,Spring Boot,Bean Validation,我有个人POJO,其中在private LocalDateTime startTime属性,如下所示 @NotNull @JsonProperty("startTime") @DateTimeFormat(pattern = "yyyy-MM-dd'T'hh:mm:ssZ", iso = DateTimeFormat.ISO.DATE_TIME) private LocalDateTime startTime; 我需要将“

我有个人POJO,其中在
private LocalDateTime startTime属性,如下所示

    @NotNull
    @JsonProperty("startTime")
    @DateTimeFormat(pattern = "yyyy-MM-dd'T'hh:mm:ssZ", iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime startTime;
我需要将
“startTime”:“2020-08-20T12:30:18+0000”
从我的JSON输入发送到rest端点


我收到错误的请求,我的验证中是否缺少任何内容?我尝试删除
Z
并添加
@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“yyy-MM-dd@HH:mm:ssZ“
也可以,但不起作用。

您可以为所需格式编写LocalDateTime反序列化程序,并在字段上使用

@NotNull
@JsonDeserialize(using = JacksonLocalDateTimeDeserializer.class)
private LocalDateTime startTime;
自定义反序列化器实现

import java.time.format.DateTimeFormatter;

public class JacksonLocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
  private static final long serialVersionUID = 9152770723354619045L;
  public JacksonLocalDateTimeDeserializer() { this(null);}
  protected JacksonLocalDateTimeDeserializer(Class<LocalDateTime> type) { super(type);}

  @Override
  public LocalDateTime deserialize(JsonParser parser, DeserializationContext context)
      throws IOException, JsonProcessingException {
    if (parser.getValueAsString().isEmpty()) {
       return null;
    }
    return LocalDateTime.parse(parser.getValueAsString(),
                                    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
  }
}
导入java.time.format.DateTimeFormatter;
公共类JacksonLocalDateTimeDeserializer扩展StdDeserializer{
私有静态最终长serialVersionUID=915277072354619045L;
公共JacksonLocalDateTimeDeserializer(){this(null);}
受保护的JacksonLocalDateTimeDeserializer(类类型){super(类型);}
@凌驾
公共LocalDateTime反序列化(JsonParser、反序列化上下文)
抛出IOException、JsonProcessingException{
if(parser.getValueAsString().isEmpty()){
返回null;
}
返回LocalDateTime.parse(parser.getValueAsString(),
模式的日期时间格式(“yyyy-MM-dd'HH:MM:ssZ”);
}
}

谢谢,
DateTimeFormatter.of模式(常量.DATE\u TIME\u格式)常量。日期\时间\格式
哪个软件包?这个的用途是什么?在模式的
this()
@thangaveloganathan
DateTimeFormatter.中传递了null(常量.DATE\u TIME\u格式)
是我删除的一个gitch,而
这个(null)
StdDeserializer
实现的默认行为。我先不明白你的问题。没关系,不用担心。当尝试读取属性时,我得到的是
2020-08-20T12:30:18
,但我想得到完整的值,包括
+0000
。i、 e.
2020-08-20T12:30:18+0000
LocalDateTime不存储偏移数据好的,那么我将用其他方式处理它。非常感谢!:-)