У меня есть API с двумя объектами Foo
и Bar
с отношением "один ко многим", т. е. каждый Bar
должен ссылаться на Foo
.
У меня есть конечные точки для создания как Foo
, так и Bar
- эти конечные точки имеют свои соответствующие DTO, определенные с проверкой javax.
public class CreateFooDto {
@NotNull public Integer field1;
@Length(min=1, max=8) public String field2;
}
public class CreateBarDto {
@NotNull public Boolean field1;
@NotEmpty public String field2;
@NotNull public String fooId; // the foreign key to Foo
}
Теперь мне нужна новая конечная точка, которая создает Bar
и Foo
вместе и связывает их, а не сначала создает Foo
, а затем создает Bar
, передавая fooId
. Мне понадобятся все те же поля с теми же проверками, за исключением обязательного CreateBarDto.fooId
. В идеале я хотел бы повторно использовать проверки javax, которые я уже определил, а не повторять их.
Я хотел вложить существующие DTO в комбинированный DTO для новой конечной точки, но есть проблема с этим @NotNull
на CreateBarDto.fooId
— на самом деле это не требуется. Пока лучшее решение, которое я придумал, это:
public class CreateBarWithFooDto {
@Valid public CreateFooDto foo;
@Valid public CreateBarDto bar;
}
public class CreateBarDto {
@NotNull public Boolean field1;
@NotEmpty public String field2;
public String fooId; // the foreign key to Foo
public boolean fooIdNotRequired; // optional flag to indicate fooId not required
@AssertTrue
public boolean isFooIdRequired() {
return fooIdNotRequired || fooId != null;
}
}
Хотя это работает, это действительно довольно неуклюже. Просто интересно, может ли кто-нибудь предложить лучший шаблон для повторного использования таких проверок javax, или есть ли какие-либо аннотации javax, о которых я не знаю, которые могут помочь с этим?