【问题标题】:Best way to validate username length in JPA, Hibernate在 JPA,Hibernate 中验证用户名长度的最佳方法
【发布时间】:2014-11-11 04:31:15
【问题描述】:

我正在为自己编写应用程序,并且想知道在将 JPA 与 Hibernate 一起使用时验证用户名/密码长度的最佳方法是什么? 首先,我想添加 @Column(length = 20) (你必须知道我的应用程序由 RESTful 服务组成)但是当有人尝试添加用户名超过 20 个字符的用户实体时,它会导致 DataIntegrityViolationException。

我知道我可以在 Spring UserController 中处理这个问题,但我认为这并不清楚。此异常可能意味着实际上所有问题(引用用户实体的所有内容)。

我还可以在将用户名持久化到数据库之前验证用户名(可能创建并抛出一些 UsernameSizeExceededException 或类似的东西),但我很确定,JPA 开发人员已经找到了解决这种情况的方法

你能推荐我什么? 谢谢! :)

【问题讨论】:

  • @Column(length = 20) 并不意味着验证。它用于描述(如果您想从 JPA 实体生成表)。有 Hibernate 使用的验证器。您可以使用@Length@notNull@NotEmpty
  • 好吧..这很有意义:P所以最好的方法是创建我自己的验证器并验证该字段?我从未使用过验证器 :) 通过 username.lenght > 3 和
  • 不是特定的验证器。在@Column 上方添加@Length(...)
  • 这里是一个例子:@Length(max = 40, message = "First name is too long")@NotEmpty(message = "First Name is required.")@Column(name = "FIRST_NAME")private String firstName;
  • 澄清一下 - @Column 在模式生成时由底层数据库评估,因此它不符合您的要求。

标签: java spring hibernate jpa


【解决方案1】:

这是最简单的解决方案:

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
... 

@Length(max = 40, message = "First name is too long") 
@NotEmpty(message = "First Name is required.") 
@Column(name = "FIRST_NAME") 
private String firstName;

在这里你可以找到maven依赖:

<dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>4.3.0.Final</version>
                <exclusions>                    
                    <exclusion>
                        <groupId>org.hibernate.javax.persistence</groupId>
                        <artifactId>hibernate-jpa-2.0-api</artifactId>
                    </exclusion>
                </exclusions>                
            </dependency>

【讨论】:

  • 你我明白了,但仍然 - 当我尝试保留这个实体时,我得到 ConstraintViolationException 并且我想知道如何通知我的客户(使用我的休息服务的客户)哪些数据输入了错误:用户名,密码等
  • 我的意思是:ConstraintViolationException 太笼统,实际上没有准确直接的信息是哪一部分出错了
  • 您可以捕获异常,如果它是constraintViolationException 类型,则向它们返回一条特定消息,就像大多数网站一样
  • 其实我也不知道,所以想问一下:如果出现constraintViolationException,我的服务方法应该返回什么?只有 400 BAD REQUEST 和空的身体?或某种信息哪个字段填写错误?
【解决方案2】:

一种选择是使用Hibernate Validator,它实现了JSR 349 - Bean Validation 1.1

【讨论】:

    【解决方案3】:

    Hibernate Validator.,正如上面其他用户所提到的。如果您正在寻找样本,Spring in action book 有一个很好的例子。 Here is the Github source code for a sample from the book.

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2011-03-08
      • 2010-09-13
      • 2016-01-17
      相关资源
      最近更新 更多