【问题标题】:Spring doesn't invoke Hibernate validator for method params validationSpring 不会为方法参数验证调用 Hibernate 验证器
【发布时间】:2018-10-26 22:37:53
【问题描述】:

我想利用 Hibernate Validator 注释来验证在请求中传递给我的服务的查询参数。

@GET
@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
void searchUsers(@Length(min = 3) @QueryParam("q") String searchTerm, @Range(min = 1, max = Integer.MAX_VALUE) @QueryParam("page") Integer page,
        @Suspended AsyncResponse response);

上面是一个方法的例子。当我在 2 个字符长的请求中发出带有 q 参数的请求时,我的请求不会被 400 代码拒绝,而是一直到达服务层。 此外,如果 page 参数设置为负数,则不会进行验证。

在我的 pom.xml 中,我包含了 Hibernate 验证器依赖项:

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

我使用的 Spring 版本是4.1.6。

另外,在我的applicationContext.xml 中,我有以下 bean:

<bean id="validator"   class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

还有什么我需要配置/启用的吗?

【问题讨论】:

    标签: java hibernate-validator spring-4


    【解决方案1】:

    @Length 约束将null 值视为有效。因此,您似乎需要为 q 设置默认值或向其添加 @NotNull。

    【讨论】:

    • 这与@NotNull 约束无关,即使我为q 参数设置了2 个字符,也没有任何反应
    • 那么你应该把这些东西放到问题中。否则,你在做什么,什么对你有用,什么没用就不清楚了。因为它现在读到的是 - 如果没有传递 q 参数 @Lenght 不起作用。显然情况并非如此。下一个问题是 - 您的应用中是否配置了 LocalValidatorFactoryBean?
    • 我已经修改了启用LocalValidatorFactoryBean 的问题描述。还是没有运气。
    猜你喜欢
    • 2022-10-26
    • 2018-06-20
    • 2019-04-22
    • 1970-01-01
    • 2016-12-17
    • 2017-12-12
    • 2015-02-12
    • 2019-11-08
    • 2011-07-12
    相关资源
    最近更新 更多