spring-如何自定义api规范中生成的operationId的值?

我已经使用springfox 2.0配置了spring项目.我能够用它生成开放的API规范.

 "paths": {
    "/test/testinfo": {
      "post": {
        "tags": [
          "test-controller"
        ],
        "summary": "getTestInfo",
        "operationId": "getTestInfoInfoUsingGET",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ]

如您所见,operationId的值格式如下

[java_method_name_here]Using[HTTP_verb_here]

例如getPetsUsingGET

在使用swagger-codegen生成客户端时使用此operationId.
有谁知道如何自定义它?我知道可以使用@ApiOperation针对每个api完成此操作,但是是否有更通用的方法为所有api定义此格式?

解决方法:

您可以create your own plugin做到.这是使用相同的插件技术在springfox中如何执行的an example.

@Component
@Order(YOUR_PLUGIN_ORDER) // > Ordered.HIGHEST_PRECEDENCE + 1000
public class OperationNicknameIntoUniqueIdReader implements OperationBuilderPlugin {
  @Override
  public void apply(OperationContext context) {

    //Create your own transformation to format the name in the way 
    //that you prefer
    String operationNameStem = transformName(context.getName());
    //Update the method name stem that is used to generate a unique id
    context.operationBuilder().codegenMethodNameStem(operationNameStem);
  }
  ...
}

注意:无论您提出什么主意,springfox都会确保它在所有API中都是唯一的.因此,如果您有重复的命名方法,它将在唯一名称的末尾开始编号方案.例如如果getCustomer不是唯一的,它将生成唯一的ID getCustomer_1等.

上一篇:SSM接口可视化


下一篇:Springboot2.x整合Swagger3.x