Я пытаюсь использовать Джексона для сериализации одного и того же объекта DTO двумя различными способами, в зависимости от @JsonView
.
Я хочу использовать 2 разных имени для одного и того же поля.В одном случае я хочу назвать свойство json myField
(точно так же, как имя поля класса), в другом я хочу, чтобы оно было названо myInternalApiField
.
В результате я хотел бы видеть результатыаналогично представленному ниже:
Использование 1 (внешний просмотр API):
{
"myField": "value1",
"myOtherField": "otherValue"
}
Использование 2 (внутренний просмотр API):
{
"myInternalApiField": "value1",
"myOtherField": "otherValue"
}
В моей реализации вJava, чтобы добиться этого, я использовал комбинацию пользовательских методов получения, установки и аннотации @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.
Есть ли у вас какие-либо предложения, как использовать @JsonView
в Kotlin в аналогичныхкстати как я это делал на яве?