DateTimeFormat接受json请求中的数字而不是日期格式

问题描述 投票:1回答:2

我需要使用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")

如何使此请求无效

java spring spring-boot bean-validation jsr
2个回答
1
投票

写完我自己的解串器

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));

}
}

0
投票

使用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"
}
© www.soinside.com 2019 - 2024. All rights reserved.