当前位置: 首页 > 面试题库 >

使用Jackson进行序列化和反序列化:如何以编程方式忽略字段?

卫兴邦
2023-03-14
问题内容

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

实际上,我在使用@JsonIgnore避免在不需要属性时打印该属性。当我需要时,我会通过以下方式禁用该物业

mapper.getSerializationConfig().disable(SerializationConfig.Feature.USE_ANNOTATIONS);

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

如何获得所需的结果?使用视图?有什么例子吗?

一点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)


问题答案:

我认为您应该通过创建可以选择性地序列化/忽略密码的自定义Jackson序列化程序来处理这种问题。

这样的注释在运行时应该被认为是不可变的。有 可能 是一些反映把戏来提取JsonIgnore和设置的值,但是,如果是这样,这将是非常严厉的。



 类似资料:
  • 来自REST服务的json对象 使用JacksonInFiveMinutes中的代码 ObjectMapper mapper=new ObjectMapper(); Map userData=mapper.read值(webResource.queryParams(queryParams). get(String.class);, Map.class); 在哪里: 从REST服务返回json 从J

  • 我使用的是JAVA 1.6和Jackson 1.9.9我有一个枚举 我添加了一个@jsonValue,这似乎完成了它将对象序列化为:

  • 问题内容: 我使用以下代码来序列化从外部服务获得的响应,并作为我的服务的一部分返回json响应。但是,当外部服务返回带有时区(10:30:00.000-05.00)的时间值时,杰克逊会将其转换为15:30:00。如何忽略时区值? 问题答案: 您可以创建自定义解串器 告诉杰克逊使用您的自定义解串器 并像这样使用它: 您可以使用Jackson自定义序列化为服务响应添加时区信息

  • 我有一个这样的对象: 我是否可以使用和我的条件来仅在不为负数的情况下包含该值?或者有没有其他的解决办法我可以做到这一点?

  • 问题内容: 在这个例子中 如果JSON对象缺少属性“ age”, 有人说它不能反序列化。在反序列化期间是否有 注释 可以忽略丢失的字段? 谢谢 问题答案: 我想你想要的是 这就是Jackson 1.x的方式。我认为2.x中有一种新方法。就像是 这些将告诉Jackson仅序列化不为null的值,并且在反序列化缺少的值时不会抱怨。我认为它将只是将其设置为Java默认值。

  • 问题内容: 我无法找出使用杰克逊实现自定义序列化/反序列化的正确方法。我有很多类(〜50),它们带有应被序列化/反序列化而不是原始的原始字段。喜欢: 所有序列化和反序列化都非常相似,我只需要在整数之后添加一个后缀(C,页面,米等)。 一种简单的方法是在每个这样的字段中添加一对/ 注释并实现它们。但是我最终会得到100个 非常相似的 序列化器/反序列化器。 我想到了添加自定义注释的各个领域,说或,这