You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java多对象数组类创建与Quarkus下JSON动态字段及空值忽略实现

问题解答

1. 如何创建可接受不同对象数组的Java类?

有三种常用实现方式:

  • 泛型类(推荐,类型安全)
    定义带泛型的容器类,可灵活适配任意对象类型:

    public class GenericContainer<T> {
        private List<T> items = new ArrayList<>();
    
        public void addItem(T item) {
            items.add(item);
        }
    
        public List<T> getItems() {
            return items;
        }
    
        public void setItems(List<T> items) {
            this.items = items;
        }
    }
    

    使用时指定具体类型,比如存放Data对象:

    GenericContainer<Data> dataContainer = new GenericContainer<>();
    dataContainer.addItem(new Data());
    
  • List(简单但类型不安全)
    直接用Object作为列表元素类型,可存放任意对象,但取出时需强制类型转换:

    public class MixedContainer {
        private List<Object> data = new ArrayList<>();
    
        // getter/setter
    }
    
  • 继承+多态(适用于有共同特征的对象)
    定义一个父类,让所有需要存入的对象继承该父类,然后用父类类型作为列表元素:

    public class BaseEntity {}
    
    public class Data extends BaseEntity {
        // 原有字段
    }
    
    public class OtherEntity extends BaseEntity {
        // 其他字段
    }
    
    public class PolymorphicContainer {
        private List<BaseEntity> data = new ArrayList<>();
    }
    
  • 2. Quarkus框架下实现JSON序列化需求

    Quarkus默认使用Jackson处理JSON序列化,以下是针对你的需求的具体实现步骤:

    第一步:调整实体类结构

    建议将Data类的age字段从String改为Integer(年龄是数值类型,方便后续判断),然后通过Jackson注解实现序列化规则:

    import com.fasterxml.jackson.annotation.JsonInclude;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Person {
        // 忽略当前类及子对象的所有null属性
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private List<Data> data = new ArrayList<>();
    
        public List<Data> getData() {
            return data;
        }
    
        public void setData(List<Data> data) {
            this.data = data;
        }
    }
    
    public class Data {
        private String name;
        private Integer age;
        private String job;
    
        // 仅当年龄>30时才序列化job属性
        @JsonInclude(JsonInclude.Include.NON_NULL)
        public String getJob() {
            if (age != null && age > 30) {
                return job;
            }
            return null;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public void setJob(String job) {
            this.job = job;
        }
    }
    

    第二步:全局配置(可选,替代类上的注解)

    如果不想给每个类加@JsonInclude,可以在application.properties中添加全局配置,让所有JSON序列化都忽略null值:

    quarkus.jackson.serialization-inclusion=non_null
    

    这样就可以去掉Person类上的@JsonInclude注解,只保留Data类中getJob方法的注解即可。

    效果验证

    当你构建Person对象并作为Quarkus接口响应返回时,序列化后的JSON会自动:

    • 忽略所有null值字段
    • 仅当age大于30时显示job属性,与你期望的输出格式一致。

    内容的提问来源于stack exchange,提问作者Ruan Roussenq Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:53:30