【问题标题】:Replace @PathVariable object with ID only for Springdoc仅将 @PathVariable 对象替换为 Springdoc 的 ID
【发布时间】:2023-04-10 14:10:01
【问题描述】:

我目前正在尝试从 Springfox 迁移到 Springdoc。

我的大多数端点都包含@PathVariable Instance。显然我只是传入了实例的 ID,Spring 会自动为我解析对象。

这是一个例子:

@RestController
@RequestMapping(value = "/api/{instance}/role")
public class RoleController {

  @GetMapping()
  public ResponseEntity<?> getRoles(@PathVariable Instance instance) {
    return ResponseEntity.ok().build();
  }
  
}

称为/api/myInstance/role

Springfox 会为我正确处理这个问题,只生成{instance} 作为String 映射到Instance 的ID。但是,Springdoc 期望将整个对象作为路径参数传递。

到目前为止我确实尝试过,但它似乎没有任何效果:

static {
  SpringDocUtils.getConfig().replaceParameterObjectWithClass(Instance.class, String.class);
}

如果可能的话,我想避免使用相同的注释来注释数百个端点,并在全球范围内解决这个问题。

【问题讨论】:

    标签: java spring openapi springfox springdoc


    【解决方案1】:

    您可以定义自己的ParameterCustomizer

    @Component
    public class InstanceParameterCustomizer implements org.springdoc.core.customizers.ParameterCustomizer {
        @Override
        public Parameter customize(Parameter parameterModel, MethodParameter methodParameter) {
            if (Instance.class.equals(methodParameter.getParameterType()) && methodParameter.getParameterAnnotation(PathVariable.class) != null) {
                parameterModel.setName("id"); // if you need to change the name  ...
                parameterModel.setSchema(new StringSchema());
            }
            return parameterModel;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 1970-01-01
      • 2017-07-04
      • 2017-11-14
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 2021-07-23
      • 2020-04-18
      相关资源
      最近更新 更多