Commit 96b464b7 authored by Morten Kjetland's avatar Morten Kjetland
Browse files

Fixes #22 Added support for @JsonPropertyDescription

parent 8eb78a4c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ Current version: *1.0.10*
* JSON Schema Draft v4
* Supports polymorphism (**@JsonTypeInfo**, **MixIn**, and **registerSubtypes()**) using JsonSchema's **oneOf**-feature.
* Supports schema customization using:
  - **@JsonSchemaDescription**
  - **@JsonSchemaDescription**/**@JsonPropertyDescription**
  - **@JsonSchemaFormat**
  - **@JsonSchemaTitle**
  - **@JsonSchemaDefault**
+3 −0
Original line number Diff line number Diff line
@@ -6,6 +6,9 @@ import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * Same as com.fasterxml.jackson.annotation.JsonPropertyDescription
 */
@Target({ METHOD, FIELD, PARAMETER, TYPE })
@Retention(RUNTIME)
public @interface JsonSchemaDescription {
+12 −9
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ import java.util
import java.util.Optional
import javax.validation.constraints.{Max, Min, NotNull, Pattern, Size}

import com.fasterxml.jackson.annotation.{JsonSubTypes, JsonTypeInfo}
import com.fasterxml.jackson.annotation.{JsonPropertyDescription, JsonSubTypes, JsonTypeInfo}
import com.fasterxml.jackson.core.JsonParser.NumberType
import com.fasterxml.jackson.databind.jsonFormatVisitors._
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter
@@ -562,8 +562,10 @@ class JsonSchemaGenerator
            }

            // If class is annotated with JsonSchemaDescription, we should add it
            Option(ac.getAnnotations.get(classOf[JsonSchemaDescription])).map(_.value()).foreach {
              description =>
            Option(ac.getAnnotations.get(classOf[JsonSchemaDescription])).map(_.value())
              .orElse(Option(ac.getAnnotations.get(classOf[JsonPropertyDescription])).map(_.value))
              .foreach {
                description: String =>
                  thisObjectNode.put("description", description)
              }

@@ -710,10 +712,11 @@ class JsonSchemaGenerator
                // Optionally add description
                prop.flatMap {
                  p: BeanProperty =>
                    Option(p.getAnnotation(classOf[JsonSchemaDescription]))
                    Option(p.getAnnotation(classOf[JsonSchemaDescription])).map(_.value())
                      .orElse(Option(p.getAnnotation(classOf[JsonPropertyDescription])).map(_.value()))
                }.map {
                  jsonSchemaDescription =>
                    thisPropertyNode.meta.put("description", jsonSchemaDescription.value())
                  description =>
                    thisPropertyNode.meta.put("description", description)
                }

                // Optionally add title
+1 −0
Original line number Diff line number Diff line
@@ -525,6 +525,7 @@ class JsonSchemaGeneratorTest extends FunSuite with Matchers {

    assert( schema.at("/properties/dateTime/type").asText() == "string")
    assert( schema.at("/properties/dateTime/format").asText() == "date-time")
    assert( schema.at("/properties/dateTime/description").asText() == "This is description from @JsonPropertyDescription")
    assert( schemaHTML5Date.at("/properties/dateTime/format").asText() == "datetime")


+2 −0
Original line number Diff line number Diff line
package com.kjetland.jackson.jsonSchema.testData;

import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaDescription;
import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaFormat;
import com.kjetland.jackson.jsonSchema.annotations.JsonSchemaTitle;
@@ -19,6 +20,7 @@ public class PojoUsingFormat {
    @JsonSchemaFormat("checkbox")
    public Boolean choice;

    @JsonPropertyDescription("This is description from @JsonPropertyDescription")
    public OffsetDateTime dateTime;

    @JsonSchemaFormat("text")