1

我的 bean 验证有问题。我将 Quarkus 与 MongoDB 一起使用,当我尝试@Valid在请求 bean 之前运行带有注释的创建 REST API 时,如果我想创建带有null字段的文档(显然我@NotNull在实体中使用),我预计会出现异常,但创建的文档没有场地。这是我的代码:

汽车.java:

@MongoEntity(collection="cars")
public class Car extends PanacheMongoEntityBase {

    @BsonId
    private long id;
    @NotNull
    private String carName;
    @NotNull
    @Size(min = 1, max = 3)
    private String code;

    // get and set
}

汽车资源.java:

@Path("/cars")
@Consumes("application/json")
@Produces("application/json")
public class CarResource {

    @GET
    public List<Car> list() {
        return Car.listAll();
    }

    @GET
    @Path("/{id}")
    public Car get(long id) {
        return Car.findById(id);
    }

    @POST
    public Response create(@Valid Car car) {
        car.persist();
        return Response.status(201).build();
    }

我对注释有同样的问题@Size,因为我可以创建一个code字符数超过 3 个的字段。

更新

验证适用于 quarkus-hibernate-validator。

现在,我必须为独特的领域找到解决方案。

除了主要问题之外:是否有类似的注释@Indexed(unique = true)?我想为我的应用设置一个独特的字段。

4

1 回答 1

1

您需要@Validated在 Class 上使用注释,CarResource如下所示。

@Path("/cars")
@Consumes("application/json")
@Produces("application/json")
@Validated
public class CarResource {

    @GET
    public List<Car> list() {
        return Car.listAll();
    }

    @GET
    @Path("/{id}")
    public Car get(long id) {
        return Car.findById(id);
    }

    @POST
    public Response create(@Valid Car car) {
        car.persist();
        return Response.status(201).build();
    }
}
于 2020-04-11T01:53:48.917 回答