Swagger-ui does not hide readOnly nested object from example body
Asked Answered
C

2

8

I'm developing spring-boot app with swagger-ui and lombok. Currently I'm trying to hide nested object from request body, but it still shows in example json on swagger-ui page.

I have my class with annotations(simplified to only related stuff):

@Data
@ApiModel(description = "Character model")
public class Character {

    @ApiModelProperty(readOnly = true)
    private Long id;

    @ApiModelProperty(readOnly = true)
    private SearchAnnouncement searchAnnouncement;
}

Note: @Data is Lombok annotation that generates getters, setters and few other things

When I access example model on swagger page "id" filed is properly hidden in example json, and visible in response model. But "searchAnnouncement" is not hidden in example json.

I tried:
  • using readOnly = true
  • using accessMode = ApiModelProperty.AccessMode.READ_ONLY
  • using @Setter(AccessLevel.NONE), which prevents generation of setter for that field, as I read somewhere that something is checking if setter exist and sets readOnly based on that
  • different combinations of above

but in all cases example json looks like this (id hidden, and searchAnnouncement visible):

{
    "searchAnnouncement": {
         "id": 0,
    },
}

So in short my question is:

Is it possible to hide from example json nested object?

EDIT: Forgot to mention I currently have swagger2 & swagger-ui with version 2.9.2 in my dependencies, but I moved up from 2.8.0 hoping to hide this nested object

Calley answered 24/11, 2018 at 1:13 Comment(0)
I
1

I had the same issue, I fixed it by setting jsonIgnore on my setters. I'm using dependency version 2.9.2.

Inter answered 11/12, 2019 at 7:23 Comment(1)
I tried your suggestion but when reading the related data, the nested object is also ignored.Eruct
I
-1

Using swagger3:

@JsonReadOnly
@Schema(description = "ID", accessMode = Schema.AccessMode.READ_ONLY)
private Long id;
Ibo answered 17/12, 2020 at 17:23 Comment(1)
I can't find @JsonReadOnly, but @JsonProperty(access = JsonProperty.Access.READ_ONLY) works for me.Chronaxie

© 2022 - 2024 — McMap. All rights reserved.