Обрезать пробелы по размеру валидации Javax

Мне нужно проверить поле в POJO, оно должно быть минимальной длины = 2, игнорируя начальные и конечные пробелы

class User {
    @NotBlank
    @Size(min = 2)
    private String name;
}

это не работает для "А"

Как это должно быть?


person Romper    schedule 21.03.2017    source источник
comment
Как насчет написания собственного валидатора?   -  person zakaria amine    schedule 21.03.2017
comment
да это решение, но весь код с аннотациями и с ними понятнее   -  person Romper    schedule 21.03.2017
comment
С валидатором hibernate вы также можете создавать свои собственные аннотации.   -  person zakaria amine    schedule 21.03.2017
comment
хорошо, я думал, что это будет реализовано в библиотеках   -  person Romper    schedule 21.03.2017
comment
Вы можете использовать @PostLoad, чтобы предоставить метод жизненного цикла для обрезки. [Ссылка] (заголовок stackoverflow.com/questions/21902919/). Это будет работать как сеттер. Но вы должны предоставить его как статическую реализацию и выполнить постобработку с помощью lib func.   -  person phoenix    schedule 21.03.2017


Ответы (3)


Сначала 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;
    }
}
person Ken Bekov    schedule 21.03.2017
comment
@Romper Добро пожаловать. Кстати, при использовании ограничения @Size можно снять @NotBlank. Пустое значение в любом случае не принимается. - person Ken Bekov; 21.03.2017
comment
Пустая строка будет принята без @NotBlank - person Romper; 23.05.2017

Попробуйте использовать метод ниже, это позаботится о пробелах. И вам не нужно настраивать/кодировать определенный код для каждого поля. Это будет полезно, когда вы имеете дело с большим количеством полей. StringTrimmerEditor(true) -- обнуляет, если содержит только пробелы.

StringTrimmerEditor(false) — он просто обрезает начальные и конечные пробелы. если он имеет только пробелы, просто делает его пустой строкой.

в классе контроллера:

@InitBinder
public void initialBinderForTrimmingSpaces(WebDataBinder webDataBinder) {
    StringTrimmerEditor stringTrimEditor = new StringTrimmerEditor(true);
    webDataBinder.registerCustomEditor(String.class, stringTrimEditor);
}
person SreeSwaroop    schedule 01.12.2019

Таким образом, гораздо более простое предложение (по крайней мере, на мой взгляд) состоит в том, чтобы создать метод, который проверяет, меньше ли обрезанная длина минимальной (в данном случае 2), или просто проверяет при назначении строки. Это намного проще и менее запутанно, чем создание пользовательской аннотации. Если это так, установите имя в обрезанную строку, иначе ничего не делайте.

ex:

public void setName(String str){
    if(str.trim().length() < 2)
        str = str.trim();
    this.name = str;
}

Я сам думал об этом точном вопросе, но, хотя я не хотел, чтобы имя содержало менее двух допустимых символов, я не хотел обрезать фактическую строку, если в ней просто был пробел между двумя именами (например, имя и фамилия ).

И да, я знаю, что это примерно через 3 года после того, как вопрос был задан.

person Matt    schedule 07.07.2020