Spring boot LocatDateTime的Spring引导Bean验证
我有个人POJO,其中在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; 我需要将“
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()
@thangaveloganathanDateTimeFormatter.中传递了null(常量.DATE\u TIME\u格式)
是我删除的一个gitch,而这个(null)
是StdDeserializer
实现的默认行为。我先不明白你的问题。没关系,不用担心。当尝试读取属性时,我得到的是2020-08-20T12:30:18
,但我想得到完整的值,包括+0000
。i、 e.2020-08-20T12:30:18+0000
LocalDateTime不存储偏移数据好的,那么我将用其他方式处理它。非常感谢!:-)