使用OpenAPI Generator生成对象时,如何隐藏响应中的JSON字段?
解决OpenAPI Generator生成的实体类字段无法隐藏的问题
问题分析
你尝试使用@Hidden和@JsonIgnore注解隐藏字段,但均未生效:
@Hidden是Swagger的注解,仅用于在API文档中隐藏字段,不会影响Jackson的序列化/反序列化逻辑,所以响应中仍会输出该字段。- 生成的代码中同时存在
@JsonProperty("name")和@JsonIgnore,若Jackson默认优先识别getter方法(而非字段),仅在字段上加@JsonIgnore可能无法阻止序列化。
有效解决方案
方案1:使用OpenAPI标准writeOnly属性(推荐)
这是最符合规范的方式,通过OpenAPI YAML的writeOnly: true标记字段仅用于请求输入,不参与响应输出。OpenAPI Generator会自动生成Jackson的@JsonPropertyAccess(WRITE_ONLY)注解,确保字段不会被序列化到响应中。
YAML配置示例:
components: schemas: YourEntity: type: object properties: id: type: string name: type: string writeOnly: true
生成的对应代码:
@JsonProperty("id") private String id; @JsonProperty("name") @JsonPropertyAccess(JsonProperty.Access.WRITE_ONLY) private String name;
方案2:让@JsonIgnore作用于Getter方法
若必须使用@JsonIgnore,需确保注解被添加到字段的getter方法上(Jackson默认会扫描getter方法进行序列化)。通过YAML的x-method-extra-annotation配置,让OpenAPI Generator在getter方法上添加注解:
YAML配置示例:
components: schemas: YourEntity: type: object properties: id: type: string name: type: string x-field-extra-annotation: "@com.fasterxml.jackson.annotation.JsonIgnore" x-method-extra-annotation: "@com.fasterxml.jackson.annotation.JsonIgnore"
生成的getter方法会带有@JsonIgnore,阻止Jackson序列化该字段:
@JsonIgnore public String getName() { return name; }
方案3:调整Jackson序列化策略
在项目配置中强制Jackson仅基于字段进行序列化,忽略getter方法。以Spring Boot为例,在application.yml中添加:
spring: jackson: visibility: field: ANY getter: NONE
此时字段上的@JsonIgnore注解会生效,直接阻止该字段被序列化。
内容的提问来源于stack exchange,提问作者veera
相关产品推荐
相关产品推荐

