现在,使用 swagger-codegen-cli v3.0.24(目前无法使用最新版)生成 jaxrs-cxf 服务器 API,我可以将 config.json 中的属性
useGenericResponse
设置为 true 以支持使用 javax.ws.rs.core.Response
类。这太棒了。我花了很长一段时间才弄清楚这一点。我遇到的下一个问题是,并非 API 中的所有端点都使用该类作为响应,但该属性在生成期间将 API 中的所有响应设置为该类型。有办法解决这个问题吗?如果没有,我猜我将不得不与特定响应分开生成通用响应。
在不同的操作中设置响应类型不会覆盖全局设置......至少不会以“传统”方式,如下所示。我认为像这样显式定义返回类型会覆盖每个位置的通用属性。
paths:
/sample:
get:
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SampleDTO'
似乎没有固有的方法可以通过配置或标准 OpenAPI 约定来做到这一点。我发现创建一个供应商扩展来保存一个布尔值,以确定是否在每个操作中使用该类响应,然后在模板文件中使用它是覆盖它的一种方法。具体来说,使用 JavaJaxRS 自定义
returnTypes.mustache
模板。
YAML 示例:
openapi: 3.0.1
info:
servers:
paths:
/sample:
get:
x-response: true
returnTypes.mustache 更改:
{{#vendorExtensions.x-response}}Response{{/vendorExtensions.x-response}}{{! non-generic response:}}
{{^vendorExtensions.x-response}}{{!
}}{{{returnType}}}{{!
}}{{/vendorExtensions.x-response}}
需要考虑的一件事是,这样做将覆盖
useGenericResponse
标志。如果您想继续使用该选项,则必须考虑模板中是否设置了该选项。