У меня была аналогичная проблема с проверкой формы логического значения, где технически я хотел, чтобы клиент только передал либо true, либо false, никаких других значений, чтобы убедиться, что они поняли, что на самом деле передают эти значения, а не передают целое число и мой код работает на основе интерпретируемого значения false (Boolean.valueOf() возвращает false практически для всего, кроме true).
Чтобы прояснить постановку задачи, поскольку некоторые люди кажутся немного запутанными, логическая проверка здесь не работает, потому что они могут пройти
{...
"value":8675309,
...}
где значение ДОЛЖНО быть логическим (но явно передается как int), однако валидатор/преобразователь просто запускает Boolean.valueOf() для переданного объекта, что в этом случае приведет к ложному результату, что может привести к последующей логике и изменениям что клиент НЕ ожидал (т. е. если логическое значение было чем-то вроде keepInformation, этот вышеприведенный сценарий мог привести к тому, что пользователь потерял всю свою информацию, потому что форма не была правильно проверена, и вы, возможно, оказались на крючке, поскольку клиент не технически сказать keepInformation:false)
В любом случае, чтобы бороться с этим, я обнаружил, что самым простым способом было сохранить логическое значение в виде строки, подобной такой
@NotNull
@Pattern(regexp = "^true$|^false$", message = "allowed input: true or false")
private String booleanField;
Я протестировал это регулярное выражение, и оно будет проходить ТОЛЬКО для значения: true/true или значения: false/false, оно не будет работать с дополнительными кавычками (value:\true\), пробелами (value:true) и всем остальным, что не соответствует тому, что я написал выше.
Затем в вашем собственном геттере в этом объекте данных вы можете самостоятельно запустить логическое преобразование для дальнейшего использования.
public boolean isSomething() {
return Boolean.valueOf(booleanField);
}
person
Logan Smith
schedule
23.07.2020
Pattern
аннотация проверяетCharSequence
, а неBoolean
объект в соответствии с документацией: docs.oracle.com/javaee/7/api/javax/validation/constraints/ Вам нужно будет изменить свой тип наString
, чтобы использоватьPattern
. В качестве альтернативы вы можете создать свой собственный валидатор или проверить, существует ли уже логический валидатор. - person pandaadb   schedule 30.05.2019