开发者社区 问答 正文

Jackson: 将一个变量序列化为一个没有包装类的子对象

我需要将JSON发送给一个客户,用他们已经存在的代码完成一个合同。

我在对象中有一个字段:

public class FoodStores {
    //More variables
    private int wholemeal;
    ...
}

我需要Jackson将单个字段序列化为以下格式:

{
   //More JSON keys and values
   "bread": {
       "wholemeal": 5
   },
   ...
}

我如何才能做到这一点不使用包装类。我在这里看到的唯一方法是使用包装类并用@JsonRootName

展开
收起
1128944438887630 2019-11-29 22:07:21 1208 分享 版权
阿里云 AI 助理回答

在不使用额外包装类的情况下,你可以通过Jackson的@JsonUnwrapped注解来实现你的需求。这个注解允许你将一个类的字段“展开”到其父对象中,从而避免了创建单独的包装类。下面是如何修改你的FoodStores类以达到目标JSON结构的示例:

import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.annotation.JsonProperty;

public class FoodStores {
    // More variables...

    @JsonUnwrapped
    private Bread bread = new Bread();

    // Getter and Setter for bread...

    public static class Bread {
        private int wholemeal;

        @JsonProperty("wholemeal")
        public int getWholemeal() {
            return wholemeal;
        }

        public void setWholemeal(int wholemeal) {
            this.wholemeal = wholemeal;
        }
    }

    // ...其他getter和setter
}

在这个例子中,我们定义了一个嵌套类Bread,并用@JsonUnwrapped注解它。这样,当FoodStores对象被序列化时,Bread类中的字段会直接出现在外层对象中,而不是作为独立的对象。注意,我们也使用了@JsonProperty注解来明确指定JSON字段名称,尽管在这个特定的例子中它是多余的,因为字段名和想要的JSON键名一致。

然后,当你使用Jackson的ObjectMapper来序列化FoodStores实例时,输出的JSON就会是按照你所期望的格式:

{
   // More JSON keys and values
   "bread": {
       "wholemeal": 5
   },
   ...
}
有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答