假设我们需要显示如:用户名[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表达式: validatedValue得到输入的值,如zhangsan。当然我们还可以使用如 v a l i d a t e d V a l u e 得 到 输 入 的 值 , 如 z h a n g s a n 。 当 然 我 们 还 可 以 使 用 如 {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那些事”
扫描下面二维码,更多技术资料等你来拿