ePages-de / restdocs-api-spec

Adds API specification support to Spring REST Docs
MIT License
392 stars 102 forks source link

Gradle task openapi3 fails when a field is not given a description #121

Open pangyikhei opened 4 years ago

pangyikhei commented 4 years ago

Not sure if this is intended behavior, but when I don't specify a description for a response field, the output snippet resource.json outputs "description": null, which causes the openapi3 gradle task to fail.

Example:

The controller returns an array of objects.

[
  {
    "example": "blah"
  }
]

resources.json shows a null value for description

 "responseFields" : [ {
      "attributes" : { },
      "description" : null,
      "ignored" : false,
      "path" : "[].example",
      "type" : "STRING",
      "optional" : false
    },

Test uses Spring @WebMvcTest and MockMvc with MockMvcRestDocumentationWrapper

this.mockMvc.perform(get("/example"))
        .andExpect(status().isOk())
        .andDo(document("example", resource(ResourceSnippetParameters.builder()
            .responseFields(
                fieldWithPath("[].example").type(JsonFieldType.STRING)
            )
            .build()
        )));

Error:

Execution failed for task ':example:openapi3'.
> com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class com.epages.restdocs.apispec.model.FieldDescriptor] value failed for JSON property description due to missing (therefore NULL) value for creator parameter description which is a non-nullable type
...

com.epages.restdocs.apispec.model.ResourceModel["response"]->com.epages.restdocs.apispec.model.ResponseModel["responseFields"]->java.util.ArrayList[0]->com.epages.restdocs.apispec.model.FieldDescriptor["description"])

If I add any description to the FieldDescriptor, the task succeeds.

ozscheyge commented 4 years ago

Interesting, we are always using FieldDescriptor with a description to leverage Spring restdocs throwing errors when not all/too many fields are documented (missing FieldDescriptor is equivalent to a missing description for us).

Your usage seems to be valid, however. So I'd consider it an error in the openapi3 generator.

Thanks for the report!

seokjun7410 commented 8 months ago

I think I can solve this problem. Can I handle this issue?