Java Hibernate验证器即使在违反约束的情况下也执行JAX-RS REST端点
我正在使用Hibernate validator 5.x和javax validation 1.x(由于某些原因,无法升级)。 此场景在hibernate validator 6.x和validation 2.x中工作 在违反约束时,验证器将启动并显示正确的错误响应,但同时执行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
@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"
}