Kotlin: измените имя свойства json в зависимости от @JsonView - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь использовать Джексона для сериализации одного и того же объекта 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 в аналогичныхкстати как я это делал на яве?

1 Ответ

0 голосов
/ 08 декабря 2018

Как насчет чего-то вроде:

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 , но вы можете увидеть, обращаются ли они к вам.

...