Мне нужно проверить поле в POJO, оно должно быть минимальной длины = 2, игнорируя начальные и конечные пробелы
class User {
@NotBlank
@Size(min = 2)
private String name;
}
это не работает для "А"
Как это должно быть?
Мне нужно проверить поле в POJO, оно должно быть минимальной длины = 2, игнорируя начальные и конечные пробелы
class User {
@NotBlank
@Size(min = 2)
private String name;
}
это не работает для "А"
Как это должно быть?
Сначала Spring будет использовать сеттер-метод для установки значения свойства. И для проверки значения Spring получит его с помощью метода получения. Это означает, что вы можете обрезать значение в методе установки, чтобы подготовить его к проверке:
public class User {
@NotBlank
@Size(min = 2)
private String name;
public void setName(String value){
this.name = value.trim();
}
public String getName(){
return this.name;
}
}
@Size
можно снять @NotBlank
. Пустое значение в любом случае не принимается.
- person Ken Bekov; 21.03.2017
Попробуйте использовать метод ниже, это позаботится о пробелах. И вам не нужно настраивать/кодировать определенный код для каждого поля. Это будет полезно, когда вы имеете дело с большим количеством полей. StringTrimmerEditor(true) -- обнуляет, если содержит только пробелы.
StringTrimmerEditor(false) — он просто обрезает начальные и конечные пробелы. если он имеет только пробелы, просто делает его пустой строкой.
в классе контроллера:
@InitBinder
public void initialBinderForTrimmingSpaces(WebDataBinder webDataBinder) {
StringTrimmerEditor stringTrimEditor = new StringTrimmerEditor(true);
webDataBinder.registerCustomEditor(String.class, stringTrimEditor);
}
Таким образом, гораздо более простое предложение (по крайней мере, на мой взгляд) состоит в том, чтобы создать метод, который проверяет, меньше ли обрезанная длина минимальной (в данном случае 2), или просто проверяет при назначении строки. Это намного проще и менее запутанно, чем создание пользовательской аннотации. Если это так, установите имя в обрезанную строку, иначе ничего не делайте.
ex:
public void setName(String str){
if(str.trim().length() < 2)
str = str.trim();
this.name = str;
}
Я сам думал об этом точном вопросе, но, хотя я не хотел, чтобы имя содержало менее двух допустимых символов, я не хотел обрезать фактическую строку, если в ней просто был пробел между двумя именами (например, имя и фамилия ).
И да, я знаю, что это примерно через 3 года после того, как вопрос был задан.