gpt4 book ai didi

java - Kotlin:根据@JsonView更改json属性名称

转载 作者:行者123 更新时间:2023-12-02 13:37:14 25 4
gpt4 key购买 nike

我尝试使用Jackson来根据@JsonView以2种不同的方式序列化同一DTO对象。

我想在同一字段中使用2个不同的名称。在一种情况下,我想将json属性命名为myField(就像类字段名称一样),在另一种情况下,我希望将其命名为myInternalApiField

结果,我希望看到与以下内容类似的结果:

用法1(外部API View ):

{
"myField": "value1",
"myOtherField": "otherValue"
}

用法2(内部API View ):
{
"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中是不允许的。

您是否有任何建议像我在Java中那样使用Kotlin中的 @JsonView

最佳答案

怎么样:

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中创建计算的属性,例如:
  • 使用Jackson Mixins
  • 为特定的调用
  • 创建 custom serializer
  • 将自定义序列化程序与custom annotations
  • 组合

    但是,即使DTO类中没有这种复杂性,它们也有其自身的复杂性。我不确定这些内容是否对我更具吸引力,但您可以看到它们是否对您有吸引力。

    关于java - Kotlin:根据@JsonView更改json属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53677313/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com