Я немного расстроен, и не уверен, что мне следует делать, кроме как просто отказаться от того, чтобы сделать этот Валидатор настолько всеобъемлющим, насколько мне бы того хотелось. У меня есть конечная точка, которая выглядит примерно так:
@PutMapping(value = "/v1/operation/{actionType}")
public void operation(
@ApiParam(value = "type", required = true, allowableValues = "retry-all, retry-parquet, re-drop")
@PathVariable("actionType") RetryActionType actionType,
@Null @RequestBody @Valid RetryDto retryDto
) throws Exception {...}
Теперь аннотация @Valid
, стоящая за retryDto
, представляет собой довольно конкретный валидатор, который гарантирует, что retryDto
верен. Проблема заключается в том, что после недавних разработок и добавления дополнительных функций срок действия retryDto теперь зависит от actionType
.
Я довольно растерян, как включить actionType
в retryDto
. Мои ограничения следующие:
Я не могу изменить эту конечную точку. Я не могу, например, сделать actionType
не ApiParam, и я не могу сделать retryDto
не RequestBody. Я так не думаю, по крайней мере. Если вы можете придумать разумный способ сохранить конечную точку ("/v1/operation/{actionType}"
) одинаковой, принимая {actionType}
в качестве ApiParam и тела запроса, но, скажем, оба они могут быть объединены в один объект длявыглядеть примерно так:
@PutMapping(value = "/v1/operation/{actionType}")
public void operation(
@??? @??? @??? NewTypeThatIsActionTypeAndRetryDto x
) throws Exception {...}
Я бы с этим согласился. Опять же, NewType...
должен быть в состоянии принять ApiParam и RequestBody. Сомневаюсь, что это возможно, но я не эксперт.
Я не могу заставить клиентов включать actionType
в RequestBody объекта retryDto. Это не означает, что если, скажем, кто-нибудь из вас знает способ, которым я могу автоматически добавить actionType
к retryDto
, это было бы неприемлемо. Другими словами, я могу изменить retryDto
, чтобы принимать actionType
«автоматически». Само собой разумеется, что мой валидатор должен видеть это, конечно.
Я думаю, что это так. Я надеялся, что смогу как-нибудь автоматически добавить actionType
к retryDto
. Может быть, я могу заставить @Valid
принять переменную в качестве параметра? Я почти уверен, что аннотации должны принимать константы ... но, может быть, есть какой-то способ?
Может быть, что-то еще целиком? Хотел бы услышать в ответ. Спасибо