我需要使用jsr annotations / spring rest来验证日期
@Email(regexp = ".+@.+\\..+")
private String email;
@NotNull
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateOfBirth;
但它接受以下json请求
{ "email": "[email protected]","dateOfBirth": 7,}
并将其解析为1970-01-07(自1970年起增加7天)
甚至低于注释也允许数字
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
如何使此请求无效
写完我自己的解串器
class LocalDateDeserializer extends StdDeserializer<LocalDate> {
protected LocalDateDeserializer(){
super(LocalDate.class);
}
@Override
public LocalDate deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
return LocalDate.parse(jp.readValueAs(String.class));
}
}
使用jsr notationspring rest验证日期。
添加依赖项
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
像这样的实体字段。
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private LocalDate expireDate;
Json请求这样。
{
"expireDate" :"2015-01-01"
}