【问题标题】:How to get json results prior to my custom schema in java/jackson?如何在 java/jackson 中的自定义模式之前获取 json 结果?
【发布时间】:2026-01-14 07:25:09
【问题描述】:

我遇到了一个问题,我试图正确地生成我的 json 格式。所以,我得到了我的自定义模式的第一部分,但我需要一些帮助来修复第二部分,即小时、每周、每年的数组列表,以将值列为数组,我坚持要解决这个问题。谁能帮我解决这个问题。谢谢!

【问题讨论】:

    标签: java json spring-boot jackson spring-restcontroller


    【解决方案1】:

    您需要从步骤创建列表并使用writeObjectField 方法序列化此列表。您可以在下面找到示例实现:

    class JobSerializer extends StdSerializer<Salary> {
    
        public JobSerializer() {
            this(Salary.class);
        }
    
        public JobSerializer(Class<Salary> t) {
            super(t);
        }
    
        @Override
        public void serialize(Salary value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
            jgen.writeStartObject();
            jgen.writeStringField("id", value.jobClassCd + value.payGrade + value.jobGroup);
            jgen.writeStringField("label", value.jobClassTitle + "( " + value.jobClassCd + value.payGrade + ") " + value.jobGroup);
    
            jgen.writeStringField("pay_grade_description_link", "payGrade");
            jgen.writeStringField("job_type", value.sectionToDisplay);
            jgen.writeStringField("mou", value.mou);
            jgen.writeStringField("mou_description", value.mouDescription);
            jgen.writeStringField("special_notes", value.specialNotes);
            jgen.writeStringField("salary_range_min_step_message", value.salaryRangeMinStepMessage);
    
            List<String> jobs = Arrays.asList(value.step1, value.step2, value.step3, value.step4, value.step5, value.step6, value.step7,
                    value.step8, value.step9, value.step10, value.step11, value.step12, value.step13, value.step14,
                    value.step15, value.step16, value.step17, value.step18, value.step19, value.step20);
            jgen.writeObjectField(value.rateType, jobs);
    
            jgen.writeEndObject();
    
        }
    }
    

    此外,您可以从 Salary 类的所有属性中删除 @JsonSerialize。它不是必需的,可能会造成混淆。

    【讨论】:

    • 感谢您的回答。另外,你知道为什么我要打印 3 个作业而不是一个大的 json 对象吗?如架构上的示例所示。
    • @VeeA,我不明白你的意思。你能更新一下你如何序列化Salary对象和结果JSON的问题吗?
    • 用我的 json 结果更新了问题。我得到 3 个对象而不是一个。请查看我的自定义架构。
    • @VeeA,您似乎创建了 3 个具有不同 rateType 字段的 Salary 实例。它与Jackson 无关,而是您需要修复您的代码。
    • 在我的Salary 类中还是在我的控制器中?