#java #spring-boot #date #validation #jackson
#java #весенняя загрузка #Дата #проверка #джексон
Вопрос:
Мне нужно проверить дату с помощью шаблона ‘гггг-ММ-дд ЧЧ: мм: сс’. Я использую util date с версией jackson 2.10.2 и не могу перейти на 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», тогда приложение выдаст исключение ошибки внутреннего сервера.
Комментарии:
1. Я рекомендую вам не использовать
Date
. Этот класс плохо разработан и давно устарел. Вместо этого используйтеLocalDateTime
или какой-либо другой класс из java.time, современный Java date и time API .
Ответ №1:
Это SimpleDateFormat
то, что обрабатывает фактический настраиваемый синтаксический анализ. Вы можете установить значение lenient
as 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)