Jackson etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Jackson etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Nisan 2018 Perşembe

Jackson JsonSchema Sınıfı

Giriş
Şu satırı dahil ederiz.
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
Bir sınıfın tipini ve tüm alanlarını json formatında schema olarak yazar. Böylece java sınıfını python'a gönderebiliriz.

Örnek
Elimizde şöyle bir sınıf olsun.
import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {

  @JsonProperty("name")
  private String name;

} 
Çıktı olarak şöyle bir json verir.
{
  "type" : "object",
  "id" : "urn:jsonschema:org:gradle:Person",
  "properties" : {
    "name" : {"type" : "string"}
  }
}
Örnek
Elimizde şöyle bir sınıf olsun.
public class Pojo {
  private String string = "default";
  public int integer = 1;
  public String getString(){
    return string;
  }
}
Çıktı olarak şöyle bir schema alırız.
{
  "type":"object",
  "id":"urn:jsonschema:Pojo",
  "properties":{
    "string":{"type":"string"},
    "integer":{"type":"integer"}
  }
}
constructor
Örnek
Şöyle yaparız.
public static String getJsonSchema (Class clazz) throws IOException {
  ObjectMapper mapper = new ObjectMapper();
  JsonSchemaGenerator jsonSchemaGenerator = new JsonSchemaGenerator(mapper);
  JsonSchema jsonSchema = jsonSchemaGenerator.generateSchema(clazz);
  return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema);
}
Örnek
Şöyle yaparız.
ObjectMapper mapper= new ObjectMapper();
JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper);
JsonSchema jsonSchema = generator.generateSchema(Pojo.class);
System.out.println(mapper.writeValueAsString(jsonSchema));
setId metodu
Eğer bir alanı dahil etmek istemezsek şöyle yaparız.
jsonSchema.setId(null);

16 Mart 2018 Cuma

Jackson @JsonProperty Anotasyonu

Giriş
Şu satırı dahil ederiz.
import com.fasterxml.jackson.annotation.JsonProperty;
Alan json'a çevirilirken kullanılacak tag ismini belirtir.

Örnek
Şöyle yaparız.
public class Person {

  @JsonProperty("name")
  private String name;

} 
access Alanı
Alanın deserialize edilmemesini sağlar. Şöyle yaparız.
@JsonProperty(access = Access.READ_ONLY)
private Long id;
value Alanı
Örnek
Şöyle yaparız.
public class Foo {
  @JsonProperty("first")
  private List<String> first = new ArrayList<>();
  @JsonProperty("second")
  private List<String> second = new ArrayList<>();
  @JsonProperty("third")
  private List<String> third = new ArrayList<>();
  ...
}
Çıktı olarak şunu alırız.
{"Foo":{"first":[],"second":[],"third":[]}}


6 Mart 2018 Salı

Jackson JsonSchemaGenerator Sınıfı

Giriş
Şu satırı dahil ederiz.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
constructor - ObjectMapper
Şöyle yaparız.
ObjectMapper mapper = new ObjectMapper();
JsonSchemaGenerator jsonSchemaGenerator = new JsonSchemaGenerator(mapper);
constuctor - ObjectMapper + JsonSchemaConfig
Şöyle yaparız.
ObjectMapper objectMapper = new ObjectMapper();
JsonSchemaConfig config = JsonSchemaConfig.nullableJsonSchemaDraft4();
JsonSchemaGenerator schemaGenerator = new JsonSchemaGenerator(objectMapper, config);
JsonNode jsonNode = schemaGenerator.generateJsonSchema(Test.class);
String jsonSchemaText = jsonNode.toString();
generateSchema metodu
Şöyle yaparız.
JsonSchema jsonSchema = jsonSchemaGenerator.generateSchema(Person.class);
rejectAdditionalProperties metodu
Elimizde şöyle bir sınıf olsun.
class A{
    private String s;
    private B b;

    public String getS() {
        return s;
    }

    public B getB() {
        return b;
    }
}
Şöyle yaparız.
ObjectMapper mapper = new ObjectMapper();
JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper);
ObjectSchema schema = schemaGen.generateSchema(A.class).asObjectSchema();
schema.rejectAdditionalProperties();
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);
Çıktı olarak şunu alırız
{
  "type" : "object",
  "id" : "urn:jsonschema:com.xxx.xxx:A",
  "additionalProperties" : false,
  "properties" : {
    "s" : {
      "type" : "string"
    },
  }
}