JSON Схема нескольких экземпляров свойства - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь определить схему json, в которой есть несколько свойств, экземпляры одного и того же объекта для конечной точки приложения Java.

Простой пример того, что я пытаюсь сделать это

{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",

"properties": {
    "last": {
        "$ref": "#/$def/node"
    },
    "next": {
        "$ref": "#/$def/node"
    }
},
"$def": {
    "node": {
        "type": "object",
        "properties": {
            "item": "object"
        }
    }
}}

Проблема в том, что когда я передаю это в jsonschema2pojo, он интерпретирует это как last и next как отдельные классы, а не экземпляры общего объекта node.

----------------------------------- com.example.Last. java -----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Last {

@SerializedName("item")
@Expose
public Object item;

}

------ ----------------------------- com.example.Next. java ------------ -----------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Next {

@SerializedName("item")
@Expose
public Object item;

}

------------------ ----------------- com.example.Node. java ------------------------ -----------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Node {

@SerializedName("last")
@Expose
public Last last;
@SerializedName("next")
@Expose
public Next next;

}

Можно ли иметь несколько экземпляров свойства в json -схеме, и могу ли я express это? Или это ограничение инструмента / плагина jsonschema2pojo? Или json -схема требует помещения нескольких экземпляров в массив?

1 Ответ

0 голосов
/ 05 апреля 2020

Кажется, что вы должны принудительно использовать тот же тип, который используется, объявив в вашем определении спецификацию c "javaType", которая, к сожалению, является специфичной для инструмента c (чего вы хотели избежать в соответствии с вашими комментариями) .

Следующее работало на jsonschema2pojo.org :

Вход: JSON Схема

{
  "type": "object",
  "properties": {
      "last": {
        "$ref": "#/definitions/node"
      },
      "next": {
        "$ref": "#/definitions/node"
      }
  },
  "definitions": {
      "node": {
          "javaType" : "com.example.Node",
          "type": "object",
          "properties": {
            "item": {}
          }
      }
  }
}

Выход: com.example.Example.java

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example {

    @SerializedName("last")
    @Expose
    public Node last;
    @SerializedName("next")
    @Expose
    public Node next;

}

Вывод: com.example.Node.java

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Node {

    @SerializedName("item")
    @Expose
    public Object item;

}
...