我需要将JSON发送给一个客户,用他们已经存在的代码完成一个合同。
我在对象中有一个字段:
public class FoodStores {
//More variables
private int wholemeal;
...
}
我需要Jackson将单个字段序列化为以下格式:
{
//More JSON keys and values
"bread": {
"wholemeal": 5
},
...
}
我如何才能做到这一点不使用包装类。我在这里看到的唯一方法是使用包装类并用@JsonRootName
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在不使用额外包装类的情况下,你可以通过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
},
...
}