我正在尝试使用Jackson来以两种不同的方式序列化同一DTO对象,具体取决于<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.2/p5.min.js"></script>
。
我想在同一字段中使用2个不同的名称。在一种情况下,我想命名json属性@JsonView
(就像类字段名一样),在另一种情况下,我希望将其命名为myField
。
因此,我希望看到类似于以下内容的结果:
用法1(外部API视图):
myInternalApiField
用法2(内部API视图):
{
"myField": "value1",
"myOtherField": "otherValue"
}
在实现Java的实现中,我使用了以下自定义getter,setter和{
"myInternalApiField": "value1",
"myOtherField": "otherValue"
}
批注的组合:
@JsonView
但是我不知道如何在Kotlin中正确地获得相同的结果。
我正在考虑使用类似的东西:
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不允许这样做。
您是否有任何建议像我在Java中那样使用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
)
?
答案 0 :(得分:1)
怎么样?
data class CustomDTO(
@JsonView(ExternalApiView::class)
var myField: String,
val myOtherField: String,
val myDifferentField: String
) {
val myExternalField: String
@JsonView(InternalApiView::class)
get() {
return myField
}
}
似乎有些方法不需要在DTO中创建计算的属性,例如:
但是这些都有自己的复杂性,即使DTO类中没有这种复杂性。我不确定这些对 me 是否更具吸引力,但您可以看到它们是否对您有吸引力。