1 package io.swagger.v3.core.util;
2
3 import com.fasterxml.jackson.core.JsonParser;
4 import com.fasterxml.jackson.core.JsonProcessingException;
5 import com.fasterxml.jackson.databind.DeserializationContext;
6 import com.fasterxml.jackson.databind.JsonDeserializer;
7 import com.fasterxml.jackson.databind.JsonNode;
8 import com.fasterxml.jackson.databind.node.ObjectNode;
9 import io.swagger.v3.oas.models.responses.ApiResponse;
10 import io.swagger.v3.oas.models.responses.ApiResponses;
11
12 import java.io.IOException;
13 import java.util.Iterator;
14 import java.util.LinkedHashMap;
15 import java.util.Map;
16
17 public class ApiResponsesDeserializer extends JsonDeserializer<ApiResponses> {
18 @Override
19 public ApiResponses deserialize(JsonParser jp, DeserializationContext ctxt)
20 throws IOException, JsonProcessingException {
21 ApiResponses result = new ApiResponses();
22 JsonNode node = jp.getCodec().readTree(jp);
23 ObjectNode objectNode = (ObjectNode)node;
24 Map<String, Object> extensions = new LinkedHashMap<>();
25 for (Iterator<String> it = objectNode.fieldNames(); it.hasNext(); ) {
26 String childName = it.next();
27 JsonNode child = objectNode.get(childName);
28
29 if (childName.startsWith("x-")) {
30 extensions.put(childName, Json.mapper().convertValue(child, Object.class));
31 } else {
32 result.put(childName, Json.mapper().convertValue(child, ApiResponse.class));
33 }
34 }
35 if (!extensions.isEmpty()) {
36 result.setExtensions(extensions);
37 }
38 return result;
39 }
40 }
41