jackson-module-jsonSchema icon indicating copy to clipboard operation
jackson-module-jsonSchema copied to clipboard

How to specify the "id" URI?

Open heruan opened this issue 8 years ago • 2 comments

I have two classes: Article and User and their respective schemas are available at:

  • http://localhost:8080/api/articles/$schema
  • http://localhost:8080/api/users/$schema

Since Article.author is of type User, how can I have the correct $ref in the schema? Now I'm getting this:

{
   "type":"object",
   "properties":{
      "id":{
         "type":"integer"
      },
      "title":{
         "type":"string"
      },
      "author":{
         "type":"object",
         "id":"urn:jsonschema:it:saiv:best:common:entity:User",
         "properties":{
            "id":{
               "type":"integer"
            },
            "cn":{
               "type":"string"
            }
         }
      }
   }
}

but I would expect something like:

{
   "type":"object",
   "properties":{
      "id":{
         "type":"integer"
      },
      "title":{
         "type":"string"
      },
      "author":{
          "$ref":"http://localhost:8080/api/users/$schema"
      }
   }
}

This is the code I'm using to generate the schema:

    @GET
    @Path("/$schema")
    @Produces(MediaType.APPLICATION_JSON)
    public String getSchema() throws IOException {
        HyperSchemaFactoryWrapper visitor = new HyperSchemaFactoryWrapper();
        ObjectMapper mapper = new ObjectMapper();
        mapper.acceptJsonFormatVisitor(Article.class, visitor);
        JsonSchema schema = visitor.finalSchema();
        return mapper.writeValueAsString(schema);
    }

heruan avatar Aug 03 '15 10:08 heruan