0

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

@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)

不幸的是,我已经找到了对输入参数做同样事情的任何方法。我想知道是否有人通过适当的例子帮助我解决这个问题。

4

1 回答 1

1

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

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

现在,如果您有一个像这样的一对多映射,InputParam => [Method1InputParamView, Method2InputParamView]那么它会涉及更多一点,并且它与支持@JsonView #601相关。

注意:从github issue转载的答案。请关注 github 线程,了解更多关于选项的讨论。

于 2016-02-17T15:40:16.070 回答