java - 杰克逊的春季启动无法验证 java.util.Date
问题描述
我需要使用模式 'yyyy-MM-dd HH:mm:ss' 验证日期。我正在使用带有杰克逊版本 2.10.2 的 util date,并且我无法根据公司要求迁移到 java 8 localdate。我发现了很多关于这个问题的问答,但没有一个能正确解决我的问题。
import com.fasterxml.jackson.annotation.*;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"provisionedDate",
})
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY,
getterVisibility = JsonAutoDetect.Visibility.NONE,
setterVisibility = JsonAutoDetect.Visibility.NONE)
public class PostProvisionCallback implements Serializable {
@JsonProperty("id")
private String id;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
@NotNull(message = "provisionedDate cannot be null")
@JsonProperty("provisionedDate")
private Date provisionedDate;
}
即使我输入了无效日期,例如“20201-0612213-17 09:26:12”,这仍然被评估为有效日期。什么是完美的解决方案。?但是如果我输入日期为“2020/03/04 09:26:12”,那么应用程序会抛出内部服务器错误异常。
解决方案
它是SimpleDateFormat
处理实际可配置解析的。您可以将 的值设置lenient
为false
。
代替
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
和
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", lenient = OptBoolean.FALSE)
推荐阅读
- r-markdown - 逐字内联代码后的代码块会中断幻灯片分隔符
- windows - 如何在 Windows 下构建 SpiderMonkey?
- email - SuiteCrm 电子邮件通知复制
- swift - 连接到 LEGO EV3 上的 ev3dev
- java - 从正则表达式中转义完整路径的一部分,同时保留其中的一部分
- xml - datapower 中的请求类型 SOAP 和 XML
- python - 在不知道索引的情况下访问列表的多个元素
- excel - 是否有任何 VBA 函数仅将更改的值从一列复制到另一列?
- splunk - 如何成功将 Eventgen App 添加到 Splunk
- firebase - 有什么办法可以解决在firebase存储中捕获的这个图像加载异常?