Spring Boot如何仅在返回响应时忽略POJO字段且复用同一实体?
解决方案
方案1:使用@JsonProperty(access = Access.WRITE_ONLY)标记id字段
这是最直接的实现方式,WRITE_ONLY属性指定字段仅在**反序列化(接收请求)**时被读取,**序列化(返回响应)**时自动忽略,完全匹配你的需求。
同时要处理前端lname与POJOlastName的字段映射,以及返回时的lName字段名,最终代码如下:
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty.Access; public class Student { // 仅允许反序列化时读取,序列化时忽略 @JsonProperty(access = Access.WRITE_ONLY) private String id; private String name; // 接收前端传入的lname,返回响应时输出为lName @JsonAlias("lname") @JsonProperty("lName") private String lastName; // 生成标准getter、setter方法 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
方案2:@JsonIgnore搭配@JsonProperty(兼容低版本Jackson)
如果你的Jackson版本低于2.6(不支持Access枚举),可以用这个组合实现:
- 给id的getter添加
@JsonIgnore,让序列化时忽略该字段 - 给id的setter添加
@JsonProperty,让反序列化时能通过setter正常赋值
import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; public class Student { private String id; private String name; @JsonAlias("lname") @JsonProperty("lName") private String lastName; @JsonIgnore public String getId() { return id; } @JsonProperty public void setId(String id) { this.id = id; } // 其他字段的getter、setter正常编写 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
效果验证
- 接收请求:前端传入的
id、name、lname都会正确映射到Student对象的对应字段,id不会出现null的情况 - 返回响应:序列化后的JSON仅包含
name和lName字段,id被自动忽略,完全符合预期格式
内容的提问来源于stack exchange,提问作者user13876589
相关产品推荐
相关产品推荐

