gpt4 book ai didi

java - 使用 Jackson : how to programmatically ignore fields? 进行序列化和反序列化

转载 作者:行者123 更新时间:2023-11-30 07:24:51 25 4
gpt4 key购买 nike

我正在使用 Jackson 序列化和反序列化对象。问题是有时我想显示一个字段,有时又不想。

实际上,我正在使用 @JsonIgnore 来避免在不需要时打印属性。当我需要它时,我会通过

禁用该属性
mapper.getSerializationConfig().disable(SerializationConfig.Feature.USE_ANNOTATIONS);

但这也会禁用我需要的其他注释。

我怎样才能得到我需要的结果?使用 View ?有什么例子吗?

了解我想要什么的一点点 pojo:

class User {
private String username;
@JsonIgnore
private String password;
// getter setter
}


writeToDB() {
mapper.getSerializationConfig().disable(SerializationConfig.Feature.USE_ANNOTATIONS);
mapper.writeValueAsString(user);
}

并且通过 REST API 你可以获得没有密码的用户名(感谢 JsonIgnore)

最佳答案

最后我用不同的方式处理了这个问题。我当时使用的是 Jersey 和 Guice,所以有点难以找出具体方法,但我做到了。

基本上我使用了 Jackson 的 MixIn 注释,但使用 Jersey 我必须将 ObjectMapper 创建到 Provider 中,然后将其与 Guice 绑定(bind)。

这样,当我使用 REST 服务时,Jersey 将使用 Provider 中定义的 ObjectMapper;存储内容时,Jackson 将使用标准的 ObjectMapper。

现在是一些代码。

创建 PrivateUser 类:

public abstract class PrivateUser {
@JsonIgnore abstract String getPassword();
}

创建提供者:

@Provider
public class JacksonMixInProvider implements ContextResolver<ObjectMapper> {

@Override
public ObjectMapper getContext(Class<?> aClass) {
final ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().addMixInAnnotations(User.class, PrivateUser.class);
return mapper;
}
}

并绑定(bind)它:

bind(JacksonMixInProvider.class).asEagerSingleton();

就是这样! :D

希望这会帮助其他人减少浪费时间!

关于java - 使用 Jackson : how to programmatically ignore fields? 进行序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11232045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com