Я не могу понять, как заставить Java генерировать клиент, который будет сериализовать объект заголовка как json.
Объект, который я хочу передать в свой заголовок:
Код: Выделить всё
@Data
public class RequestContextDTO {
@Valid
private TrackingDTO tracking;
}
@Data
public class TrackingDTO {
private String trackingNumber;
}
Код: Выделить всё
openapi: 3.0.1
info:
title: Test Header Serialization
version: "1"
servers:
- url: http://localhost:8080
description: Generated server url
paths:
/test/:
get:
tags:
- MyController
summary: Test Header As Complex Object
operationId: postRequestWithHeader
parameters:
- name: x-request-context
in: header
description: Request context
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/RequestContextDTO"
responses:
"200":
description: Success
components:
schemas:
RequestContextDTO:
required:
- businessContext
- userInfo
type: object
properties:
tracking:
$ref: "#/components/schemas/TrackingDTO"
TrackingDTO:
required:
- trackingNumber
type: object
properties:
trackingNumber:
type: string
Я использую следующий плагин для сделай так:
Код: Выделить всё
org.openapitools
openapi-generator-maven-plugin
7.8.0
generate
/definitions/newApi.yaml
java
false
jersey3
true
java8
${client.package}.api
${client.package}.api
${client.package}.model
false
jackson
Код: Выделить всё
public class MyControllerApi {
private ApiClient apiClient;
public ApiResponse postRequestWithHeaderWithHttpInfo(RequestContextDTO xRequestContext) throws ApiException {
if (xRequestContext == null) {
throw new ApiException(400, "Missing the required parameter 'xRequestContext' when calling postRequestWithHeader");
} else {
Map localVarHeaderParams = new LinkedHashMap();
localVarHeaderParams.put("x-request-context", this.apiClient.parameterToString(xRequestContext));
String localVarAccept = this.apiClient.selectHeaderAccept(new String[0]);
String localVarContentType = this.apiClient.selectHeaderContentType(new String[0]);
return this.apiClient.invokeAPI("MyControllerApi.postRequestWithHeader", "/test/", "GET", new ArrayList(), (Object)null, localVarHeaderParams, new LinkedHashMap(), new LinkedHashMap(), localVarAccept, localVarContentType, (String[])null, (GenericType)null, false);
}
}
}
Код: Выделить всё
public String parameterToString(Object param) {
if (param == null) {
return "";
} else if (param instanceof Date) {
return formatDate((Date) param);
} else if (param instanceof OffsetDateTime) {
return formatOffsetDateTime((OffsetDateTime) param);
} else if (param instanceof Collection) {
StringBuilder b = new StringBuilder();
for(Object o : (Collection)param) {
if(b.length() > 0) {
b.append(',');
}
b.append(String.valueOf(o));
}
return b.toString();
} else {
return String.valueOf(param);
}
}
Есть ли способ сообщить плагину maven о создании Java-клиента, который будет сериализовать сложный объект заголовка как json? Возможно, я что-то упустил в конфигурации плагина yaml или maven.
Подробнее здесь: https://stackoverflow.com/questions/790 ... napi-gener