Добавить описание к подтипам схемы json - PullRequest
1 голос
/ 28 октября 2019

Я генерирую схему json из моих классов java с Джексоном и добавляю поле описания ко всем своим свойствам, например так:

@NotNull
@JsonProperty (required = true)
@JsonPropertyDescription ("My description to add in schema")
private double value;

Это прекрасно работает, и описание поля устанавливается в jsonсхема.

Теперь у меня есть подтипы json, описанные ниже:

@JsonTypeInfo (use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes ({
    @JsonSubTypes.Type (value = TriangularWaveformConfigurationEntity.class, name = "TRIANGULAR"),
    @JsonSubTypes.Type (value = SquareWaveformConfigurationEntity.class, name = "SQUARE")
})
public abstract class WaveformConfigurationEntity implements ConfigurationEntity

И результат:

"waveformConfiguration" : 
{
"oneOf" : [ {
            "$ref" : "#/definitions/TriangularWaveformConfigurationEntity"
          }, {
            "$ref" : "#/definitions/SquareWaveformConfigurationEntity"
          }
          "description" : "Configuration of the waveform used to generate values"
        }

С ref:

"TriangularWaveformConfigurationEntity" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "type" : {
          "type" : "string",
          "enum" : [ "TRIANGULAR" ],
          "default" : "TRIANGULAR"
        },

Моя проблема в том, что значение enum не имеет описания, и мне нужно это поле, например:

"TriangularWaveformConfigurationEntity" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "type" : {
          "type" : "string",
          "enum" : [ "TRIANGULAR" ],
          "default" : "TRIANGULAR",
          "description" : "my description"
        },

Обратите внимание, что схема генерируется с кодом:

ObjectMapper MAPPER = ConfigurationObjectMapper.createObjectMapper();
JsonSchemaGenerator jsonSchemaGenerator = new JsonSchemaGenerator(MAPPER);
JsonNode jsonSchema = jsonSchemaGenerator.generateJsonSchema(InputGeneratorConfiguration.class);

System.out.println(MAPPER.writeValueAsString(jsonSchema));

Икартограф

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(objectMapper.getSerializationConfig()
                                       .getDefaultVisibilityChecker()
                                       .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
                                       .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                                       .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
                                       .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                                       .withFieldVisibility(JsonAutoDetect.Visibility.ANY));

objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
return objectMapper;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...