Generating JSON Schema in Java with "additionalProperties" set to "true"
Recently i was working on a new tool for contract testing that we decided to develop in New10 from scratch. We decided that we would like to use JSON Schema's for contracts validation and for that i needed to implement several SDK's in typescript, java, python in order to support all the services we have. While working on Java SDK, i faced a problem with JSON schema generation for some of our models. At first i was using jackson-module-jsonSchema library, where i faced with one major problem - i couldn't generate "required": []
attribute because of this issue
So, instead, i found another library that was working better for me. But with it i faced with another problem - by default it was setting additionalProperties
: true
for every class, which is a bummer for me. Luckily i managed to find some hints in the documentation and code that allowed me to bypass this situation and now i would like to share it with everyone ( and myself in the future) :
public static JSONObject generateJsonSchema(Class clazz) throws IOException {
ObjectMapper mapper = new ObjectMapper();
JsonSchemaConfig config = JsonSchemaConfig.vanillaJsonSchemaDraft4().withFailOnUnknownProperties(false);
config = config.withFailOnUnknownProperties(false);
JsonSchemaGenerator jsonSchemaGenerator = new JsonSchemaGenerator(mapper, config);
JsonNode jsonSchema = jsonSchemaGenerator.generateJsonSchema(clazz);
String json = mapper.writeValueAsString(jsonSchema);
return new JSONObject(json);
}
That's pretty much everything you need in order to generate a JSON Schema out of a Java class.
Hope it help someone besides me :)
Happy coding everyone.