Схема Джексона / FasterXML Json с множеством вариантов выбора недвижимости в Hibernate - PullRequest
0 голосов
/ 09 июля 2019

В моем веб-интерфейсе есть поле выбора, которое позволяет вам выбрать валюту объекта. Однако эта валюта не типа Enum, а отдельная сущность со своей таблицей базы данных.

@Entity
public class MyEntity{

    @Id
    @GeneratedValue
    private long id;

    @Column(name = "createdAt")
    private Calendar createdAt;

    @Audited(targetAuditMode = NOT_AUDITED)
    @JsonProperty
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
    private Currency currency;
}


@Entity
public class Currency{

    @Id
    @GeneratedValue
    private long id;

    @Column(name = "currencyCode")
    private String currencyCode;
}

И я ожидаю, что какая-то схема JSON будет такой, как показано ниже

{
  type: "object",
  additionalProperties: false,
  properties: {
    id: {
      type: "integer"
    },
    createdDate: {
      type: "string",
      format: "date-time"
    },
    modifiedDate: {
      type: "string",
      format: "date-time"
    },
    currency: {
      type: "string",
      enum: [
        "EUR",
        "USD",
        "JPY",
        "AUD",
        ...
      ]
    }
  }
}

И я генерирую схему с

@Override
public ObjectSchema getJsonSchema() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();

JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper);

ObjectSchema schema = schemaGen.generateSchema(getGenericTypeClass()).asObjectSchema();

//schema.rejectAdditionalProperties();
return schema;
}

private Class<T> getGenericTypeClass() {
try {
    String className = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0].getTypeName();
    Class<?> clazz = Class.forName(className);
    return (Class<T>) clazz;
} catch (Exception e) {
    throw new IllegalStateException("Class is not parametrized");
}
}

Как я могу сделать динамический контент, отображаемый в схеме JSON, как если бы он был перечислением, чтобы обеспечить ограниченный выбор возможностей выбора?

...