【问题标题】:How to hide relevant endpoint based on http method如何基于http方法隐藏相关端点
【发布时间】:2016-03-13 07:38:14
【问题描述】:
    private Predicate<String> aggregationPaths() {
        return or(regex("/aggregationservice.*"),regex("/health"));
     }

这段代码 sn-p 列出了所有 Spring Boot 健康端点到招摇文档。我只想显示 Http GET 方法。有人对此有任何想法吗?

【问题讨论】:

    标签: spring-mvc spring-boot swagger-2.0 spring-boot-actuator springfox


    【解决方案1】:

    您将创建基于 RequestHandler 的谓词

     private Predicate<RequestHandler> onlyGets() {
        return new Predicate<RequestHandler>() {
              @Override
              public boolean apply(RequestHandler input) {
                 return input.getRequestMapping()
                        .getMethodsCondition()
                        .getMethods()
                        .contains(RequestMethod.GET);
          }
        };
     }
    

    并在您的 api 选择器中为您的案卷添加谓词

     //....
     new Docket().select().apis(onlyGets())
     //...
    

    【讨论】:

    • 在我的情况下,我使用了 spring boot 执行器,它将显示所有 http 方法,例如:PUT、OPTIONS ..etc,我只想公开 http GET 而不会损害其他服务端点 GET 方法,我有另一个休息端点呼叫聚合服务,你知道吗?tnx
    • 您可以根据 RequestHandler 创建自己的自定义谓词。就像onlyGets 一样,您可以创建自己的将它们与 ands 或 ors 相结合,例如Predicates.and(springEndpoints(), onlyGets())
    【解决方案2】:

    目前input.getRequestMapping() 方法已被弃用,它在 RequestHandler 中仅用于合法目的。而不是这个,你可以使用:

     private Predicate<RequestHandler> onlyGets() {
        return new Predicate<RequestHandler>() {
              @Override
              public boolean apply(RequestHandler input) {
                 return input.supportedMethods()
                        .contains(RequestMethod.GET);
          }
        };
     }
    

    【讨论】:

      猜你喜欢
      • 2012-01-17
      • 2014-07-31
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多