javax验证大小修剪空白

时间:2017-03-21 08:39:15

标签: spring bean-validation javax

我需要验证POJO中的字段,它必须是min length = 2,忽略前导和尾随空格

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

它不适用于" A"

它应该如何?

3 个答案:

答案 0 :(得分:5)

首先,Spring将使用setter-method来设置属性值。而对于验证值,Spring将使用getter-method获取它。这意味着,您可以在setter-method中修剪值以准备验证:

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;
    }
}

答案 1 :(得分:0)

尝试使用以下方法,这将照顾空格。而且您不需要为每个字段配置/编码特定代码。当您处理更多字段时,这将很有帮助。 StringTrimmerEditor(true)-如果只有空格,则将其设置为null。

StringTrimmerEditor(false)-仅修剪前导和尾随空白。如果只有空格,则将其设为空字符串。

在控制器类中:

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

答案 2 :(得分:0)

一个更简单的建议(至少在我看来)是创建一种方法,该方法检查修剪的长度是否小于最小值(在这种情况下为2),或者仅在分配字符串时检查。与创建自定义批注相比,它要容易得多,而且省时。如果是这样,请将名称设置为修剪后的字符串,否则什么也不做。

例如:

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

我本人正在思考这个确切的问题,但是尽管我不想使用少于2个合法字符的名称,但是如果实际的字符串仅在2个名称之间有空格(例如第一个,和姓氏。

是的,我知道这是在提出问题大约三年后。