6

我需要验证 POJO 中的一个字段,它必须是最小长度 = 2,忽略前导和尾随空格

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

它不适用于“ A”

应该如何?

4

3 回答 3

15

首先 Spring 会使用 setter-method 来设置属性的值。对于验证值,Spring 将使用 getter 方法获得它。这意味着,您可以在 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;
    }
}
于 2017-03-21T10:36:53.140 回答
0

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

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

在控制器类中:

@InitBinder
public void initialBinderForTrimmingSpaces(WebDataBinder webDataBinder) {
    StringTrimmerEditor stringTrimEditor = new StringTrimmerEditor(true);
    webDataBinder.registerCustomEditor(String.class, stringTrimEditor);
}
于 2019-12-01T05:26:10.440 回答
0

因此,一个更简单的建议(至少在我看来)是创建一个方法来检查修剪后的长度是否小于最小值(在本例中为 2),或者在分配字符串时简单地检查。与创建自定义注释相比,它更容易且不那么复杂。如果是这样,请将名称设置为修剪后的字符串,否则什么也不做。

前任:

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

我自己正在考虑这个确切的问题,但是虽然我不希望有一个少于 2 个合法字符的名称,但我不希望修剪实际的字符串,如果它只是在 2 个名称之间有一个空格(例如名字和姓氏)。

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

于 2020-07-07T20:38:52.023 回答