当前位置: 首页 > 知识库问答 >
问题:

不包括对杰克逊的空对象

凌炜
2023-03-14
public class Person {
    private String name;
    private PersonDetails details;

//     getters and setters...
}
Person person = new Person();
person.setName("Apple");
person.setDetails(new PersonDetails());

因此,有一个Person的实例,其中Details为空,这正是Jackson返回的内容:

"person": {
    "name": "Apple",
    "details": {}
}

我希望json没有空括号{}:

"person": {
    "name": "Apple"
}

这个问题对我没有帮助:

    null

共有1个答案

郑桐
2023-03-14

如果没有自定义序列化程序,jackson将包含您的对象。

解决方案1:用null替换新对象

person.setDetails(new PersonDetails());

person.setDetails(null);
@JsonInclude(Include.NON_NULL)
public class Person {
public class PersonDetailsSerializer extends StdSerializer<PersonDetails> {

    public PersonDetailsSerializer() {
        this(null);
    }

    public PersonDetailsSerializer(Class<PersonDetails> t) {
        super(t);
    }

    @Override
    public void serialize(
            PersonDetails personDetails, JsonGenerator jgen, SerializerProvider provider)
            throws IOException, JsonProcessingException {
        // custom behavior if you implement equals and hashCode in your code
        if(personDetails.equals(new PersonDetails()){
           return;
        }
        super.serialize(personDetails,jgen,provider);
    }
}
public class Person {
    private String name;
    @JsonSerialize(using = PersonDetailsSerializer.class)
    private PersonDetails details;
}
 类似资料:
  • 我正在Jackson中寻找一种方法来允许根据根元素序列化关系。例如,我有一个不是真正的父/子关系。两个实体都可以查询。 JsonBackReference使得序列化为json时没有循环引用。然而,这也导致我不知道公司的地址。如果我是上市公司,那么地址会回来,一切都很好。但如果我列出地址,我希望看到公司被序列化。有没有办法做到这一点?

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 问题内容: 我有一个实体: 然后我有一个控制器,其目的是检索书籍,我的问题是,流派字段包含在控制器的json响应中。有什么办法可以排除杰克逊序列化对象时延迟加载的那些字段? 这是我的ObjectMapper的配置: 谢谢! 我不能将其标记为JsonIgnore,因为它将永远在序列化框中。有时候,我将需要随书一起检索体裁,然后在查询中使用“获取联接”,因此它不会为null。 问题答案: 您可以使用J

  • 问题内容: 我如何使用jackson像下面的示例那样创建json数组。 我尝试使用ObjectMapper,但这似乎不正确。 最终,我将制作一个具有以下值的json。 这是我提供的一个示例json。 编辑1 提出以下更接近的json,但我不知道为什么在{}之前和之后加引号。 最终答案 问题答案: 您需要一个: 此类具有创建s,s,s,s,s和诸如此类的方法。s和s具有便捷的变异方法,可以直接添加大

  • 问题内容: 我有一个杰克逊问题。 有没有一种方法可以反序列化可能具有两种类型的属性,对于某些对象,它看起来像这样 然后对于其他人则显示为空数组,即 任何帮助表示赞赏! 谢谢! 问题答案: Jackson目前没有内置配置来自动处理这种特殊情况,因此必须进行自定义反序列化处理。 以下是这种自定义反序列化的外观示例。 (您可以使用DeserializationConfig.Feature.ACCEPT_

  • 问题内容: 这是我的Java代码,用于反序列化,我正在尝试将json字符串转换为java对象。为此,我使用了以下代码: 和我的product.java类 我收到以下错误。 帮我解决这个问题 问题答案: 似乎您正在尝试从JSON读取一个实际描述数组的对象。Java对象使用花括号映射到JSON对象,但是您的JSON实际上以方括号指定一个数组开始。 您实际拥有的是一个。为了描述泛型类型,由于Java的类