Я генерирую схему 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;