Java 使用jackson将对象序列化为JSON时,如何排除属性?
我有一个实现可序列化的类,它映射到一个数据库表。看起来是这样的:Java 使用jackson将对象序列化为JSON时,如何排除属性?,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我有一个实现可序列化的类,它映射到一个数据库表。看起来是这样的: @实体 @表(name=“users”) 公共类用户实现可序列化{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) 公共长id; @列(name=“name”,nullable=false) 公共字符串名称; @列(name=“email”,nullable=false) 公共字符串电子邮件; @列(name=“status”,nullable=false) 公共字符串状态; } 在大多
@实体
@表(name=“users”)
公共类用户实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
公共长id;
@列(name=“name”,nullable=false)
公共字符串名称;
@列(name=“email”,nullable=false)
公共字符串电子邮件;
@列(name=“status”,nullable=false)
公共字符串状态;
}
在大多数情况下,我希望所有这些属性都包含在JSON中。然而,有一种特殊情况,我想排除状态
,但我想不出一个好办法来处理Jackson
我的控制器看起来像这样:
公共类用户控制器{
私有最终对象映射器映射器;
@注入
公共用户控制器(ObjectMapper映射器){
this.mapper=mapper;
}
public CompletionStage getUserList(){
//获取用户列表并返回JSON;包括所有用户属性
}
public CompletionStage getUser(长用户ID){
//从JPA获得一个用户,这是一个承诺
返回userDatabase.get(userId).thenappy(user->{//user是user类型
//在这里,我不想在JSON中包含“status”。
返回mapper.valueToTree(用户);
});
}
}
因此,当我执行mapper.valueToTree(user)
时,它当然包括user
的所有属性,但我想排除此特定路由/函数中的status
,同时将其保留在所有其他序列化位置
我知道我可以使用@JsonIgnore
来忽略它,但我可以偶尔这样做吗
我想到的一些解决办法是:
并清除状态通过属性过滤
- 将
复制到用户
并手动删除对象节点
状态
但这两种情况似乎都不理想,我觉得必须对杰克逊采取更为干净的方法。你所说的“其他”情况具体是什么?您的意思是,在将对象序列化为
JsonNode
时,您只想排除状态
字段吗?@ChrisGong对不起,我的意思是,在一个路由中,我不想包括状态
,但在所有其他路由中,我确实想包括状态
。在所有情况下,它都是被序列化为json的。我可能会走在前面,但我相信您认为不理想的两种解决方案是实现预期结果的注释之外的唯一两种方法。但是,有些人可以自由地投入更多的投入。