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.DeserializationFeature;
7 import com.fasterxml.jackson.databind.JsonDeserializer;
8 import com.fasterxml.jackson.databind.JsonNode;
9 import com.fasterxml.jackson.databind.ObjectReader;
10 import io.swagger.v3.oas.models.parameters.CookieParameter;
11 import io.swagger.v3.oas.models.parameters.HeaderParameter;
12 import io.swagger.v3.oas.models.parameters.Parameter;
13 import io.swagger.v3.oas.models.parameters.PathParameter;
14 import io.swagger.v3.oas.models.parameters.QueryParameter;
15
16 import java.io.IOException;
17
18 public class ParameterDeserializer extends JsonDeserializer<Parameter> {
19 @Override
20 public Parameter deserialize(JsonParser jp, DeserializationContext ctxt)
21 throws IOException, JsonProcessingException {
22 Parameter result = null;
23
24 JsonNode node = jp.getCodec().readTree(jp);
25 JsonNode sub = node.get("$ref");
26 JsonNode inNode = node.get("in");
27
28 if (sub != null) {
29 result = new Parameter().$ref(sub.asText());
30 } else if (inNode != null) {
31 String in = inNode.asText();
32
33 ObjectReader reader = null;
34
35 if ("query".equals(in)) {
36 reader = Json.mapper().readerFor(QueryParameter.class);
37 } else if ("header".equals(in)) {
38 reader = Json.mapper().readerFor(HeaderParameter.class);
39 } else if ("path".equals(in)) {
40 reader = Json.mapper().readerFor(PathParameter.class);
41 } else if ("cookie".equals(in)) {
42 reader = Json.mapper().readerFor(CookieParameter.class);
43 }
44 if (reader != null) {
45 result = reader.with(DeserializationFeature.READ_ENUMS_USING_TO_STRING).readValue(node);
46 }
47 }
48
49 return result;
50 }
51 }
52