У меня есть контроллер с несколькими конечными точками. Эти конечные точки обслуживают один и тот же домен. Но входные параметры немного отличаются друг от друга.
Например:
endpointA:
- username
- firstname
- address
endpointB:
- username
- phoneNumber
- addresss
endpointC:
- username
- email
- workAddress
В данный момент каждый параметр является строкой, которую я передаю службе, отвечающей за обработку конечной точки ... Я также выполняю проверку. Каждый параметр имеет свои собственные требования для проверки. Поэтому я реализовал пользовательскую проверку (просто класс с методами stati c для каждого параметра, который мне нужно проверить) для каждого из них и проверил эти строки перед передачей их в службу.
Я нашел действительно хороший способ проверки: http://dolszewski.com/spring/custom-validation-annotation-in-spring/ Здесь он создает модель и по входному параметру проверяет ее с помощью @Valid
logi validation c реализуется с помощью специального валидатора и может быть задан для каждого атрибута.
Я не нашел способ сделать это для String и сделать это для каждого параметра. Поэтому я подумал, что создам объект-оболочку для параметров каждой конечной точки. Аннотируйте атрибуты с помощью пользовательских валидаторов и все. Проблема в том, что с несколькими конечными точками у меня будет много классов и дублирующийся код ...
Разумно ли создавать объект UserRequest. Реализуйте проверку для каждого атрибута и используйте этот объект в качестве входного параметра для каждой конечной точки.
Конечный результат будет выглядеть следующим образом:
UserRequestModel
@usernameValidation
username
@firsstnameValidation
firstname
@addressValidation
addresss
@phonenumberValidation
phoneNumber
@emailValidation
email
@workaddressValidation
workaddress
endpointA:
- UserRequestModel
endpointB:
- UserRequestModel
endpointC:
- UserRequestModel
Атрибуты, которые не нужны во всех конечных точках, будут помечены как необязательные.
Я также использую swagger для документов API, которые автоматически генерируют конечные точки для тестирования API. Можно было бы сказать swagger, какие атрибуты необходимы для каждой конечной точки?
Я ищу советы и лучшие шаблоны для решения подобных ситуаций. Заранее спасибо!