JsonSchema.java
package io.swagger.v3.oas.models.media;
import io.swagger.v3.oas.models.SpecVersion;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* JsonSchema
*/
public class JsonSchema extends Schema<Object> {
private static final Set<String> NUMBER_TYPES = new HashSet<>(Arrays.asList("integer", "number"));
public JsonSchema (){
specVersion(SpecVersion.V31);
}
private String resolveType() {
if (this.getTypes() != null) {
if (this.getTypes().size() == 1) {
String type = this.getTypes().iterator().next();
if (NUMBER_TYPES.contains(type)) {
return "number";
}
return type;
}
if (this.getTypes().contains("object")) {
return "object";
} else if (this.getTypes().contains("string")) {
return "string";
} else if (this.getTypes().contains("array")) {
return "array";
} else if (this.getTypes().contains("integer") || this.getTypes().contains("number")) {
return "number";
} else if (this.getTypes().contains("boolean")) {
return "boolean";
}
return this.getTypes().iterator().next();
}
return "null";
}
protected Object cast(Object value) {
if (value == null) {
return null;
}
if (value instanceof String) {
if (resolveType().equals("number")) {
try {
Number casted = NumberFormat.getInstance().parse(value.toString());
if (Integer.MIN_VALUE <= casted.longValue() && casted.longValue() <= Integer.MAX_VALUE) {
return Integer.parseInt(value.toString());
} else {
return Long.parseLong(value.toString());
}
} catch (Exception e) {
return value;
}
} else if (resolveType().equals("boolean")) {
return Boolean.parseBoolean(value.toString());
}
}
return value;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class JsonSchema {\n");
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
sb.append("}");
return sb.toString();
}
}