Должен ли я упаковать параметры моего контроллера покоя в класс или как отдельные строки пружинной загрузки - PullRequest
1 голос
/ 14 февраля 2020

У меня есть контроллер с несколькими конечными точками. Эти конечные точки обслуживают один и тот же домен. Но входные параметры немного отличаются друг от друга.

Например:

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, какие атрибуты необходимы для каждой конечной точки?

Я ищу советы и лучшие шаблоны для решения подобных ситуаций. Заранее спасибо!

1 Ответ

0 голосов
/ 14 февраля 2020

Я не вижу проблем в наличии трех разных классов, по одному для каждой из ваших конечных точек, и каждый из них будет определять свои поля (даже если они дублируются). У вас есть логин проверки c только в одном месте. Например, logi c для @usernameValidation определяется только один раз, в реализации валидатора.

Итак, я бы go для:

UserRequestModelA
  @usernameValidation
  username
  @firsstnameValidation
  firstname
  @addressValidation
  address

UserRequestModelB
  @usernameValidation
  username
  @phonenumberValidation
  phoneNumber
  @addressValidation
  address

UserRequestModelC
  @usernameValidation
  username
  @emailValidation
  email
  @workaddressValidation
  workaddress

endpointA:  
 - UserRequestModelA

endpointB:
 - UserRequestModelB

endpointC:
 - UserRequestModelC

В качестве альтернативы Если вы действительно хотите повторного использования каких-либо полей, вы можете выбрать расширение класса. У вас должен быть базовый класс, который имеет только общие поля, и ваши другие классы, указанные c для каждой конечной точки, будут расширять этот базовый класс, как показано ниже:

UserRequestModel
  @usernameValidation
  username

UserRequestModelA extends UserRequestModel
  @firsstnameValidation
  firstname
  @addressValidation
  address

UserRequestModelB extends UserRequestModel
  @phonenumberValidation
  phoneNumber
  @addressValidation
  address

UserRequestModelC extends UserRequestModel
  @emailValidation
  email
  @workaddressValidation
  workaddress

endpointA:  
 - UserRequestModelA

endpointB:
 - UserRequestModelB

endpointC:
 - UserRequestModelC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...