【发布时间】:2019-05-09 16:18:24
【问题描述】:
我正在尝试使用 Jackson 以 2 种不同的方式序列化同一个 DTO 对象,具体取决于 @JsonView。
我想为同一个字段使用 2 个不同的名称。在一种情况下,我想将 json 属性命名为 myField(就像类字段名称一样),在另一种情况下,我希望将其命名为 myInternalApiField。
因此,我希望看到类似于以下所示的结果:
用法 1(外部 API 视图):
{
"myField": "value1",
"myOtherField": "otherValue"
}
用法 2(内部 API 视图):
{
"myInternalApiField": "value1",
"myOtherField": "otherValue"
}
在我的 Java 实现中,我使用了自定义 getter、setter 和 @JsonView 注释的组合,如下所示:
public class CustomDTO {
@JsonView(Views.ExternalApiView)
private String myField;
// Other fields here
@JsonView(Views.InternalApiView)
public String getMyInternalApiField() { return myField; }
@JsonView(Views.InternalApiView)
public void setMyInternalApiField(String value) { this.myField = value; }
@JsonView(Views.ExternalApiView)
public String getMyField() { return myField; }
@JsonView(Views.ExternalApiView)
public void setMyField(String value) { this.myField = value }
}
但是我不知道如何在 Kotlin 中正确实现相同的结果。
我正在考虑使用类似的东西:
data class CustomDTO(
@get:[JsonView(Views.ExternalApiView) JsonProperty("myField")]
@get:[JsonView(Views.InternalApiView) JsonProperty("myInternalApiField")]
@set:[JsonView(Views.InternalApiView) JsonProperty("myField")]
@set:[JsonView(Views.InternalApiView) JsonProperty("myInternalApiField")]
var myField: String,
val myOtherField: String,
val myDifferentField: String
)
但这在 Kotlin 中是不允许的。
您对如何在 Kotlin 中像在 Java 中一样使用 @JsonView 有什么建议吗?
【问题讨论】:
标签: java serialization kotlin jackson deserialization