restdocs-api-spec icon indicating copy to clipboard operation
restdocs-api-spec copied to clipboard

optional() is not working in OpenAPI 3

Open tabuyos opened this issue 3 years ago • 2 comments

First of all thank you very much for your contribution on rest docs.

Here is my debug screenshot

image

and section of resource.json

"requestFields" : [{
      "attributes" : { },
      "description" : "",
      "ignored" : false,
      "path" : "nickname",
      "type" : "STRING",
      "optional" : false
    }, {
      "attributes" : { },
      "description" : "",
      "ignored" : false,
      "path" : "avatar",
      "type" : "STRING",
      "optional" : true
    }, {
      "attributes" : { },
      "description" : "",
      "ignored" : false,
      "path" : "gender",
      "type" : "NUMBER",
      "optional" : true
    } ]

and section of openapi3.yaml

    UserSignUpMessage:
      title: UserSignUpMessage
      type: object
      properties:
        gender: {type: number, description:}
        avatar: {type: string, description: }
        nickname: {type: string, description:}

Each section is relatively complete, I have read #90 #172 that It doesn't seem to help me much. I'm not sure if I'm missing something, or doing something stupid

:)

tabuyos avatar Nov 22 '22 14:11 tabuyos

I read the relevant source code carefully and found that the required properties is not filled with optional(), on the contrary, this should be a very complicated process. My unit test uses Map.class to pass and receive json parameters, it cannot be constructed using ConstrainedFields relevant constraints, maybe I missed something... tell me if you know please.

For this problem, I found a compromise solution after reading the source code

...
// define a function
protected Attributes.Attribute required() {
    List<Constraint> constraints = Lists.newArrayList(new Constraint("javax.validation.constraints.NotNull", Collections.emptyMap()));
    return Attributes.key("validationConstraints").value(constraints);
  }
...
// and use it.
fieldWithPath("field").attributes(required()).description("description")
...

Maybe there is a better solution...

My English is not as fluent as Chinese, I'm sorry for that.

Thanks again for your contribution.

tabuyos avatar Nov 23 '22 03:11 tabuyos

https://github.com/ePages-de/restdocs-api-spec/pull/244

xeromank avatar Aug 24 '23 10:08 xeromank