在Swagger中更改方法的body请求中的参数

时间:2016-02-16 07:24:50

标签: java spring-mvc swagger swagger-2.0 springfox

我一直在研究一个项目,并尝试使用Swagger-2.0来记录它。在此项目中,由于某些安全问题,控制器中具有对象作为返回类型的每个方法都应将返回对象更改为完全平坦的对象。为了做到这一点,我们在每个方法上面使用一些自定义注释,控制器本身将对象转换为返回类型。我的意思是,方法返回的Object与传递给浏览器的Object不同。而且我们对控制器中方法的输入参数也有同样的看法。这意味着用户必须为方法发送一个Object,该方法与方法的输入参数不同。以下是一个示例方法示例。

@RequestView(InputParamView.class)
@ResponseView(ReturnObjectView.class)
@RequestMapping(value = "/someMethod", method = RequestMethod.POST)
public ReturnObject someMethod(@RequestBody InputParam inputParam) {
      //do some thing
}

问题是如何配置Swagger以将InputParamViewReturnObjectView识别为此方法的输入参数和返回类型。我们通过在每个方法上方使用ApiOperation注释来为方法的返回类型执行此操作,如下所示。

@ApiOperation(value = "/someMethod", response = ReturnObjectView.class)

不幸的是,我发现任何方法都可以对输入参数做同样的事情。我想知道是否有人用一个恰当的例子来帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

例如,如果您的对象通常具有一对一的映射,则InputParam => InputParamViewReturnObject => ReturnObjectView然后很简单地解决这个问题。您需要做的就是在您的文档中设置备用类型规则。

docket
    .directModelSubstitute(InputParam.class, InputParamView.class)
    .directModelSubstitute(ReturnObject.class, ReturnObjectView.class)

现在,如果您有一对多的映射,例如InputParam => [Method1InputParamView, Method2InputParamView],则会更多地涉及它,并且它与支持@JsonView #601有关。

注意: the github issue转载的答案。请按照github主题进行更多参与讨论。