泽西岛上的Hibernate Validator与Grizzly 2验证缓慢

时间:2016-05-24 13:12:19

标签: java hibernate validation groovy hibernate-validator

我似乎遇到了一些关于Hibernate验证的问题。考虑以下端点方法(在groovy中):

@POST
@Path("authenticate")
authenticate(User entity) {
    if (entity == null) return Response.status(Response.Status.BAD_REQUEST).build()
    def validation = Validator.validate(entity)

    if(!validation.valid) {
        return Response.status(Response.Status.BAD_REQUEST).entity(validation.invalidationTokens).build()
    }
    return Response.ok(entity).build()
}

这段代码可以工作,但每次我调用这个端点时,处理大约需要300毫秒,然后下一个请求将再次非常快,然后再慢,等等......端点类是应用程序作用域,正如我首先想到的那样,可能是因为它再次创建了一个新实例,或者其他东西,但不是它。

在这里你可以看到它发生(我使用Postman来测试请求):Inconsistent process time for validation

我已经确定这是因为验证器。当我在上面发布的端点方法中省略验证时,它一直很快。

下面是我用来验证和返回违反约束的验证器类。

private static javax.validation.Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

private Validator() {

}

public static <E> ValidationResult validate(E element, Class<?> ... groups) {
    return ValidationResult.fromConstraintViolations(validator.validate(element, groups));
}

目前,在User实体中验证的唯一字段是:

@NotNull(message = "username.empty")
private String username;

我通常会使用注入来获取验证器,但我似乎无法使用它来处理此配置。

我使用以下相关的maven依赖项:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-http</artifactId>
    <version>2.22.2</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.1.0.Final</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>

更新1:

我没有提到过我通过Gson对json进行序列化。我在我的基于gson的编写器中修修补补,我似乎已经消除了不一致性(但我实际上没有改变任何程序)。当我确定这是解决方法时,我会将此作为答案发布。

0 个答案:

没有答案