gpt4 book ai didi

java - 即使违反约束,Hibernate validator 也会执行 JAX-RS REST 端点

转载 作者:行者123 更新时间:2023-12-01 19:35:37 25 4
gpt4 key购买 nike

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

一旦违反约束, validator 就会启动并显示正确的错误响应,但同时它会执行 REST 方法主体。

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();
}

预订

@ValidName
public class Book {

private String name;
private Author author;
private double price;

public Book() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Author getAuthor() {
return author;
}
public void setAuthor( Author author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}

}

@ValidName

@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 { };
}

名称 validator

@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

postman 输出

{
"data": {},
"messages": [
"1. Author name is mandatory"
],
"status": "ERROR-Bad Request"
}

我将相同的场景用于更复杂的情况,其中涉及服务和 DOA 层。 validator 不会停止执行验证,并且我的后端在验证之前使用不干净的数据进行了更新

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

最佳答案

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

关于java - 即使违反约束,Hibernate validator 也会执行 JAX-RS REST 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59223910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com