ISSUE-876 Fixed nullable fields (#878)
This commit is contained in:
parent
4c231980aa
commit
3d537f2bf1
3 changed files with 26 additions and 9 deletions
|
@ -6,8 +6,6 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.avro.Schema;
|
||||
import reactor.util.function.Tuple2;
|
||||
|
@ -82,9 +80,7 @@ public class AvroJsonSchemaConverter implements JsonSchemaConverter<Schema> {
|
|||
Tuple2::getT2
|
||||
));
|
||||
|
||||
return new ObjectFieldSchema(
|
||||
fields, Collections.emptyList()
|
||||
);
|
||||
return new ObjectFieldSchema(fields, Collections.emptyList(), true);
|
||||
}
|
||||
|
||||
private FieldSchema createObjectSchema(String name, Schema schema,
|
||||
|
|
|
@ -2,7 +2,10 @@ package com.provectus.kafka.ui.util.jsonschema;
|
|||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.BooleanNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.fasterxml.jackson.databind.node.TextNode;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -12,11 +15,18 @@ import reactor.util.function.Tuples;
|
|||
public class ObjectFieldSchema implements FieldSchema {
|
||||
private final Map<String, FieldSchema> properties;
|
||||
private final List<String> required;
|
||||
private final boolean nullable;
|
||||
|
||||
public ObjectFieldSchema(Map<String, FieldSchema> properties,
|
||||
List<String> required) {
|
||||
this(properties, required, false);
|
||||
}
|
||||
|
||||
public ObjectFieldSchema(Map<String, FieldSchema> properties,
|
||||
List<String> required, boolean nullable) {
|
||||
this.properties = properties;
|
||||
this.required = required;
|
||||
this.nullable = nullable;
|
||||
}
|
||||
|
||||
public Map<String, FieldSchema> getProperties() {
|
||||
|
@ -36,7 +46,18 @@ public class ObjectFieldSchema implements FieldSchema {
|
|||
Tuple2::getT2
|
||||
));
|
||||
final ObjectNode objectNode = mapper.createObjectNode();
|
||||
objectNode.setAll(new SimpleJsonType(JsonType.Type.OBJECT).toJsonNode(mapper));
|
||||
if (this.nullable) {
|
||||
objectNode.set(
|
||||
"type",
|
||||
mapper.createArrayNode()
|
||||
.add(JsonType.Type.OBJECT.getName())
|
||||
.add(JsonType.Type.NULL.getName())
|
||||
);
|
||||
} else {
|
||||
objectNode.setAll(
|
||||
new SimpleJsonType(JsonType.Type.OBJECT).toJsonNode(mapper)
|
||||
);
|
||||
}
|
||||
objectNode.set("properties", mapper.valueToTree(nodes));
|
||||
if (!required.isEmpty()) {
|
||||
objectNode.set("required", mapper.valueToTree(required));
|
||||
|
|
|
@ -87,7 +87,7 @@ public class AvroJsonSchemaConverterTest {
|
|||
+ "{\"$ref\":\"#/definitions/RecordInnerMessage\"}},"
|
||||
+ "\"required\":[\"record\"],\"definitions\":"
|
||||
+ "{\"RecordInnerMessage\":{\"type\":\"object\",\""
|
||||
+ "properties\":{\"long_text\":{\"type\":\"object\","
|
||||
+ "properties\":{\"long_text\":{\"type\":[\"object\", \"null\"],"
|
||||
+ "\"properties\":{\"string\":{\"type\":\"string\"}}},"
|
||||
+ "\"array\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},"
|
||||
+ "\"id\":{\"type\":\"integer\"},\"text\":{\"type\":\"string\"},"
|
||||
|
@ -151,8 +151,8 @@ public class AvroJsonSchemaConverterTest {
|
|||
"{\"$id\":\"http://example.com/Message\","
|
||||
+ "\"$schema\":\"https://json-schema.org/draft/2020-12/schema\","
|
||||
+ "\"type\":\"object\",\"properties\":{\"text\":"
|
||||
+ "{\"type\":\"object\",\"properties\":{\"string\":"
|
||||
+ "{\"type\":\"string\"}}},\"value\":{\"type\":\"object\","
|
||||
+ "{\"type\":[\"object\", \"null\"],\"properties\":{\"string\":"
|
||||
+ "{\"type\":\"string\"}}},\"value\":{\"type\":[\"object\", \"null\"],"
|
||||
+ "\"properties\":{\"string\":{\"type\":\"string\"},"
|
||||
+ "\"long\":{\"type\":\"integer\"}}}}}";
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue