Как я могу обработать один и тот же URL с разными параметрами? - PullRequest
3 голосов
/ 14 мая 2019

Я столкнулся с некоторыми проблемами при создании REST-API.

Я хочу, чтобы у некоторых API были разные параметры.

Например:

path?include="stack"
path?exclude="overflow"

Я думал два пути.

  • Первое: Create API может получать все параметры и обрабатывать в контроллере.
@GetMapping
public ResponseEntity getByFilter(@RequestParam @Nullable final String exclude,
                                  @RequestParam @Nullable final String include){
 // any process to distinguish. 
}
  • Второе: создание нескольких API может получить один параметр.
@GetMapping(params = "include")
public ResponseEntity getByInclude(@RequestParam final String include){
// do anything
}

@GetMapping(params = "exclude")
public ResponseEntity getByInclude(@RequestParam final String exclude){
// do anything
}

Но у обоих проблемы.

  • Первое: логика будет увеличена на параметры.

  • Второе: SwaggerDocument, который я использовал для SpringBoot, не может поддерживать один и тот же путь, разные параметры. Если я использую «enableUrlTemplating», мои команды будут управлять SwaggerDocument вручную.

Как я могу решить эти проблемы?

Спасибо за чтение.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вы можете сделать это только с одним контроллером. Пишите контроллер как

@GetMapping
public ResponseEntity getByFilter(@RequestParam(value="exclude", required=false) String exclude,@RequestParam(value="include", required= flase)String include){
 // any process to distinguish. 
}
0 голосов
/ 14 мая 2019

Я бы пошел по первому вашему предложению, определил ваш @RequestParam и в коде, во-первых, проверил, что определен только один параметр.

Затем, что касается документации Swagger, вы можете добавить:

  • Для каждого параметра, описание, подобное этому @ApiParam(value = "Use this parameter to exclude some resources")
  • Для конечной точки, @ApiOperation(value = "Endpoint name", notes = "Here you can put the description of the behavior you are expecting, write here if the parameters are to be used at the same time, are mutually exclusive, if you have to set always one...", response = YourResponseDTO.class)

Надеюсь, что поможет: -)

...