Java Hibernate验证器即使在违反约束的情况下也执行JAX-RS REST端点

Java Hibernate验证器即使在违反约束的情况下也执行JAX-RS REST端点,java,jax-rs,bean-validation,hibernate-validator,Java,Jax Rs,Bean Validation,Hibernate Validator,我正在使用Hibernate validator 5.x和javax validation 1.x(由于某些原因,无法升级)。 此场景在hibernate validator 6.x和validation 2.x中工作 在违反约束时,验证器将启动并显示正确的错误响应,但同时执行REST方法体 静止端点 @POST @Path("/book") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICA

我正在使用Hibernate validator 5.x和javax validation 1.x(由于某些原因,无法升级)。 此场景在hibernate validator 6.x和validation 2.x中工作

在违反约束时,验证器将启动并显示正确的错误响应,但同时执行REST方法体

静止端点

@POST
    @Path("/book")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response createBook(@Valid Book book) {
        System.out.println("Book "+book);
        return Response.status(Response.Status.OK).entity(book).build();
    }

@有效名

@Constraint(validatedBy = { NameValidator.class })
@Target({ METHOD, FIELD, PARAMETER, TYPE })
@Retention(RUNTIME)
public @interface ValidName {
    String message() default "Author name is mandatory";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}
邮递员输出

{
    "data": {},
    "messages": [
        "1. Author name is mandatory"
    ],
    "status": "ERROR-Bad Request"
}
对于涉及服务和DOA层的更复杂的情况,我使用相同的场景。验证程序未停止验证的执行,并且我的后端在验证之前使用未清理的数据进行更新


我搜索了官方文档,但没有找到帮助。

类路径中有一个jar,它正在处理sessionContext。它上面有@Stateless注释。由于某些原因,它允许绕过验证。我不能删除这个jar,因为它是web应用程序所需要的,我正在同一路径上部署Reast easy。所以我们需要找到一个解决办法

@Provider
public class NameValidator implements ConstraintValidator<ValidName, Book>{

    @Override
    public boolean isValid(Book book, ConstraintValidatorContext context) {
        if(book == null) return true;

        if(book.getName().equals("")) {
            return true;
        }else {
            return !(book.getAuthor().getName().equals(""));
        }
    }
}
12:53:31,971 INFO  [stdout] (default task-1) Book com.arfat.entity.Book@3238e1e1
{
    "data": {},
    "messages": [
        "1. Author name is mandatory"
    ],
    "status": "ERROR-Bad Request"
}