使用弹簧数据中的@Pattern注释进行正则表达式验证

时间:2018-02-14 19:47:09

标签: java regex spring-data constraints

我需要密码验证(例如密码必须包含至少4个字符,最多8个和最小1个数字)。 我有模特(当然有吸气剂和制定者):

   @Entity
public class User implements Serializable{


    /**
     * 
     */
    private static final long serialVersionUID = 5534441879591858724L;

    @Id
    @GeneratedValue
    private long id;

    @NotBlank
    @Email
    private String email;

    @Pattern(regexp = "^(?=.*\\d).{4,8}$", flags = Flag.UNICODE_CASE)
    private String password;

    @NotBlank
    @Size(min=2, max=30)
    private String name;

我在将用户信息保存到数据库时捕获ConstraintViolationException,并使用此异常中的信息在注册期间通知用户由于长度无效等必须更正哪些字段。

验证时一切正常,但密码没有。我检查了这个模型类中的正则表达式并且它工作正常,但是当我将这个正则表达式放入注释参数(@Pattern(regexp = "^(?=.*\\d).{4,8}$", flags = Flag.UNICODE_CASE))时它不起作用而且我有一个错误:

  

HHH000346:托管刷新期间出错[类验证失败   [pl.rpf.kingdom.models.User]在组的持续时间内   [javax.validation.groups.Default,]违反约束的列表:[           ConstraintViolationImpl {interpolatedMessage ='必须匹配" ^(?=。* \ d)。{4,8} $"',propertyPath = password,rootBeanClass = class   pl.rpf.kingdom.models.User,   messageTemplate =' {javax.validation.constraints.Pattern.message}'}]]

请帮助我理解这个错误,也许你对如何解决这个问题有所了解。

1 个答案:

答案 0 :(得分:0)

问题在于密码加密,我忘记了。 正则表达式匹配mathod总是错误的,因为它试图在加密后比较密码。 我通过在密码加密之前将验证放出模型类来解决问题。 解决问题的其他方法可能是在尝试将表单保存到数据库之前使用spring @Valid注释来验证表单(在我的情况下,从其他情况可能会出现问题)。