Quarkus: @Valid не работает с PanacheMongo - PullRequest
1 голос
/ 11 апреля 2020

У меня проблема с проверкой моего бина. Я использую Quarkus с MongoDB, и когда я пытаюсь запустить API REST create с @Valid аннотацией перед компонентом запроса, я ожидаю исключения, если я хочу создать документ с полем null (очевидно, я использую @NotNull в сущности), но документ создается без поля. Вот мой код:

Car. 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
}

CarResource. 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)? Я хочу уникальное поле для моего приложения.

1 Ответ

1 голос
/ 11 апреля 2020

Вам необходимо использовать аннотацию @Validated для класса 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();
    }
}
...