【问题标题】:Swagger Is not able to produce documentation for HTTP "PATCH"Swagger 无法为 HTTP“PATCH”生成文档
【发布时间】:2015-02-18 14:15:03
【问题描述】:

我已遵循以下
博客条目: http://kingsfleet.blogspot.co.uk/2014/02/transparent-patch-support-in-jax-rs-20.html
https://github.com/jersey/jersey/tree/2.6/examples/http-patch
在 Jersey 2.6 中创建支持 HTTP“PATCH”方法的端点 依赖版本:

-Jersey: 2.6
-swagger-jersey2-jaxrs_2.10: 1.3.12

问题? 为什么 Patch 端点没有被列为 swagger ui 文档的一部分?

分析:

如果我使用此注释进行注释,则会生成该端点的文档,但没有交互。

@com.wordnik.swagger.jaxrs.PATCH

配置

JerssyApplicationInitializer

packages(true, "com.test.account.endpoint", "com.wordnik.swagger.jaxrs.json");
        //Swagger Configuration
        register(new ApiListingResourceJSON(), 10);
        register(JerseyApiDeclarationProvider.class);
        register(JerseyResourceListingProvider.class);

        //Genson Converter
        register(GensonJsonConverter.class, 1);
        register(createMoxyJsonResolver());

我不确定,如果我遗漏了什么,任何帮助或指南都会有所帮助。

补丁方法文档:

 public static final String PATCH_MEDIA_TYPE = "application/json-patch+json";
    @PATCH
        //@com.wordnik.swagger.jaxrs.PATCH
        @PreAuthorize(userAuthenticationRequire=true)
        @Consumes(PATCH_MEDIA_TYPE)
        @Path("{id: .\\d+}")
        @ApiOperation(value = "Update Client Details in UIM System."
                    , response = State.class
                    , notes="Requesting User, should be the owner of the Client."
                    , consumes = PATCH_MEDIA_TYPE)
        @ApiResponses({
            @ApiResponse(code = _401, message = "If the access token is invalid.", response = String.class),
            @ApiResponse(code = _498, message = "If the access token is expired.", response = String.class),
            @ApiResponse(code = _420, message = "If Provided Input is not valid according to requirment specification."),
            @ApiResponse(code = _404, message = "If no client/app Found."),
            @ApiResponse(code = _200, message = "If Client Account has been Updated successfully. ", response=String.class)
        })
        public State updateClientDetails(@ApiParam(value="Client Id to be Updated.", required=true) @PathParam(CLIENT_ID) String clientId
                , @ApiParam(value = "Updated field and Value.", required = true) final State newState){
            //LOG.info("[ENTRY]- Received requst for updating Client {} from System.", clientId);
            System.out.println("----->" + someBean.test());
            //LOG.info("[EXIT]- Client Id {} Updation has been completed.", clientId);
            Test t = new Test();
            t.name = "Hello Test";
            System.out.println(t.name);
            return newState;
        }

【问题讨论】:

  • 你说没有生成,是看UI还是生成的Swagger JSON?
  • 你能用包含注释的示例方法签名来编辑问题吗?
  • @Ron Hmm 已编辑,请查看...感谢您抽出宝贵时间 :)
  • 另外两个问题 - 资源是否使用 @Api 注释?你用的是哪个版本的 swagger-core?
  • @Ron: 是的,它有 @Api(value = CLIENT_PATH, description = "客户端管理,例如注册、读取、更新和删除") 完整的生成文档,用于其他方法,如 GET、DELETE 内部存在.版本=1.3.12 artifactId=swagger-core_2.10

标签: java swagger swagger-ui


【解决方案1】:

看看你的 index.html。控制哪些 HTTP 操作是交互式的——通过将其更改为:

  window.swaggerUi = new SwaggerUi({
    url: url,
    dom_id: "swagger-ui-container",
    supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],

您将在 PATCH 方法上进行交互:

【讨论】:

  • 谢谢..它确实在 swagger-ui 方面进行了修复以支持@com.wordnik.swagger.jaxrs.PATCH,这里有两个问题,为什么自定义 Patch 注释不起作用?由于我正在关注 Jsonpatch (RFC 6902),因此当作为补丁请求的一部分发送正文时,我应该发送类似于此 "[{"op" : "replace","path" : "/message","value" : "patchedMessage"}]" 不能映射到资源,所以前面有什么修复吗?
  • 当我谈到自定义补丁注释时,它就像github.com/jersey/jersey/blob/2.6/examples/http-patch/src/main/…
  • Swagger 仅扫描 com.wordnik.swagger.jaxrs.PATCH,当我们编写该代码时,球衣中没有 PATCH 注释。如果您想支持自定义补丁行为,则必须在服务器上执行此操作。现在添加两个注释(jersey 和 com.wordnik.swagger.jaxrs.PATCH),它应该可以工作。我将添加一张票以添加对 org.glassfish.jersey.examples.httppatch.PATCH 的扫描支持
  • 谢谢,我添加了其中两个,并从自定义一个中删除了 @HttpMethod("PATCH")..
  • Jayaram 你现在有工作了吗?我已经打开这个问题来跟踪它:github.com/swagger-api/swagger-core/issues/876
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 2019-05-03
相关资源
最近更新 更多