【问题标题】:Change the parameters in body request of a method in Swagger在 Swagger 中更改方法的主体请求中的参数
【发布时间】:2026-01-22 17:35:02
【问题描述】:

我一直在从事一个项目,并尝试使用 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)

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

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】: