我正在使用OpenAPI maven插件(版本5.4.0)生成openapi-generator-maven-plugin合同的源代码。
我正在使用java生成器和webclient库。
我有一个端点响应application/octet-stream或application/json:
"responses": {
"200": {
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "byte"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/TheResponseObject"
}
}
}
},问题是,插件只是考虑第一个媒体类型(按声明的顺序)来生成相应的java返回类型。
有了上面的例子,我必须处理byte[]。
如果我反转媒体类型(首先是application/json),我必须处理TheResponseObject。
是否有一种方法可以同时处理它们并根据响应头获得良好的格式?
发布于 2022-07-13 06:44:55
为了处理这个问题,我已经将合同更改为始终在响应中处理byte[]。
"content": {
"application/plain": {
"schema": {
"type": "string",
"format": "byte"
}
},然后,我不是调用api.theEndpoint(...),而是调用api.theEndpointWithHttpInfo(...),它将返回一个ResponseEntity<byte[]>对象。
根据内容类型,我可以选择如何处理结果:
if (MediaType.APPLICATION_JSON.isCompatibleWith(reponse.getHeaders().getContentType())) {
// parse json response (reponse.getBody())
} else {
// it's a pdf
}发布于 2022-07-12 15:36:54
问题是:您期望从openapi-generator-maven-plugin得到什么结果?
它的主要思想是使用以下方法生成API:
ResponseEntity<TheResponseObject> get(...) 现在,您的模式定义了端点可能同时返回application/json和byte[],因此,从java的角度来看,API如下所示:
ResponseEntity<TheResponseObject> get(...);
ResponseEntity<byte[]> get(...);这是不可能的,因为这两种方法都有相同的签名。通常,可以通过在mustache目录中放置自己的版本并在插件配置中指定templateDirectory来覆盖resources模板(例如弹簧模板),但最好的方法是:
ResponseEntity<java.lang.Object> get(...);你真的需要那个吗?
https://stackoverflow.com/questions/72954680
复制相似问题