SpringMVC 使用JSR-303進行校驗Bean Validation-----訊息中使用EL表示式
阿新 • • 發佈:2019-02-14
假設我們需要顯示如:使用者名稱[NAME]長度必須在[MIN]到[MAX]之間,此處大家可以看到,我們不想把一些資料寫死,如NAME、MIN、MAX;此時我們可以使用EL表示式。
@Length(min = 5, max = 20, message = "{user.name.length.illegal}", groups = {First.class})
錯誤訊息:
user.name.length.illegal=使用者名稱長度必須在{min}到{max}之間
其中我們可以使用{驗證註解的屬性}得到這些值;如{min}得到@Length中的min值;其他的也是類似的。
到此,我們還是無法得到出錯的那個輸入值,如name=zhangsan。此時就需要EL表示式的支援,首先確定引入EL jar包且版本正確。然後使用如:
user.name.length.illegal=使用者名稱[${validatedValue}]長度必須在5到20之間
使用如EL表示式:{min > 1 ? ‘大於1’ : ‘小於等於1’},及在EL表示式中也能拿到如@Length的min等資料。
另外我們還可以拿到一個java.util.Formatter型別的formatter變數進行格式化:
${formatter.format("%04d", min)}
例項
1.新增校驗
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@GroupSequence({User.Adult.class, User.Other.class,User.class})
public class User {
@NotNull(message="{user.id.null}")
private String userName;
//@Max(value=120,message="年齡最大不能查過120",groups = {Adult.class})
private int age;
@Email(message="郵箱格式錯誤",groups = {Other.class})
private String email;
@CannotHaveBlank(groups = {Adult.class})
private String sex;
@Valid
@ConvertGroup(from=Adult.class,to=Other.class)
private String password;
@Length(min = 8,max = 11,message = "{user.phoneNum.length}")
private String phoneNum;
//分組
public interface Adult{}
public interface Other{}
}
2.新增message資訊
user.phoneNum.length=手機號碼【${validatedValue}】長度必須在{min}到{max}之間
3.測試
想了解更多java相關技術,請關注公眾號“JavaEE那些事”
掃描下面二維碼,更多技術資料等你來拿