ApiResponsesDeserializer.java
package io.swagger.v3.core.util;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.responses.ApiResponses;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class ApiResponsesDeserializer extends JsonDeserializer<ApiResponses> {
protected boolean openapi31;
@Override
public ApiResponses deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException {
final ObjectMapper mapper;
if (openapi31) {
mapper = Json31.mapper();
} else {
mapper = Json.mapper();
}
ApiResponses result = new ApiResponses();
JsonNode node = jp.getCodec().readTree(jp);
ObjectNode objectNode = (ObjectNode) node;
Map<String, Object> extensions = new LinkedHashMap<>();
for (Iterator<String> it = objectNode.fieldNames(); it.hasNext(); ) {
String childName = it.next();
JsonNode child = objectNode.get(childName);
// if name start with `x-` consider it an extension
if (childName.startsWith("x-")) {
extensions.put(childName, mapper.convertValue(child, Object.class));
} else {
result.put(childName, mapper.convertValue(child, ApiResponse.class));
}
}
if (!extensions.isEmpty()) {
result.setExtensions(extensions);
}
return result;
}
}