如何在春季@Validate 唯一用户名?

新手上路,请多包涵

假设我有一个表单,我可以在其中为新用户提交 username(@NaturalId)password

我想为用户添加一个独特的 username 。我如何使用 @Valid 注释来验证此约束?如果用户名不是唯一的,我如何通过 <form:error/> 在 jsp 中显示此信息?

原文由 user902691 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 472
1 个回答

AFAIK 没有执行此操作的注释。你有两个选择

第一,创建自定义验证器注释。 是一个很好的例子。调用您的 DAO 类并检查验证器实现中的可用性

    public boolean isValid(String object, ConstraintValidatorContext constraintContext) {

    return userDAO.userNameAvailable(object); //some method to check username availability
    }

或者

在实体类的属性上设置 unique = true。

     @Column(unique = true)
    private String userName;

但这不适用于@valid,而是抛出持久性异常。您必须使用适当的逻辑来处理它。

第一个解决方案并非万无一失。在 SO 上检查 这个 答案。

第二个意志永远不会失败。

更新

正如 NimChimpsky 评论的那样,将两者结合使用将是一个具体的解决方案。

原文由 shazinltc 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题