У меня есть 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, о которых я не знаю, которые могут помочь с этим?