如何使用不同的参数处理相同的URL?

时间:2019-05-14 07:01:54

标签: java spring spring-boot swagger-ui

创建一些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
}

但是两者都有问题。

  • 首先:逻辑将增加参数。

  • 第二个:我用于SpringBoot的SwaggerDocument无法支持相同的路径,不同的参数。如果我使用“ enableUrlTemplating”,我的团队将手动管理SwaggerDocument。

我该如何解决这些问题?

感谢阅读。

2 个答案:

答案 0 :(得分:0)

我会提出您的第一个建议,同时定义@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)

希望有帮助:-)

答案 1 :(得分:0)

您只能使用一个控制器来执行此操作。像

这样编写控制器
@GetMapping
public ResponseEntity getByFilter(@RequestParam(value="exclude", required=false) String exclude,@RequestParam(value="include", required= flase)String include){
 // any process to distinguish. 
}