【发布时间】:2014-06-10 20:51:29
【问题描述】:
我已经为 User 类正确注释和映射 JSON 输出,并为这些属性使用适当的 setter 和 getter:
public class User {
String first;
String middle;
String last;
...
}
当我使用我的 Mixin 时:
public interface UserMixin {
@JsonProperty("first")
void setFirst(String first);
@JsonProperty("middle")
void setMiddle(String middle);
@JsonProperty("last")
void setLast(String last);
}
注册 mixin 并使用 ObjectMapper 编写 User 类后,我得到:
"User" :
{
"first" : "William",
"middle" : "S",
"last" : "Preston"
}
至此,为简洁起见,我撒了一点谎 - 上面提到的 User 是一个大型的遗留 DTO 类,它对修改有抵抗力。
而且,虽然 mixin 效果很好,但我们的客户更愿意看到类似的东西:
"User" :
{
"Name" :
{
"first" : "William",
"middle" : "S",
"last" : "Preston"
}
...
}
我再说一遍,DTO 抗拒改变。理想情况下,我会重构 DTO 并正确执行。
我想我在问什么 - 我可以使用 Mixin/Annotation 的某种组合从 User 类中已有的数据中对“Name”进行子类化吗?没有 Name 子类...但是以这种格式“写出” JSON 所需的所有部分都存在。
【问题讨论】:
-
我认为你能做的最好的事情就是创建自己的
JsonSerializer。 -
反其道而行之是微不足道的 -
@JsonUnwrapped。不幸的是,据我所知,不支持自动包装该值。