Джексон не десериализует поле списка в классе данных Kotlin - PullRequest
0 голосов
/ 21 января 2020

Я создаю простой сервис Spring Boot с Kotlin. У меня есть конечная точка

@GetMapping("/summary")
fun getLoginReport(params: SummaryRequest): ResponseEntity<LoginSummaryResponse> { 
// not important
}

Класс SummaryRequest определен как

data class SummaryRequest(
    val groupBy: List<SummaryGroupBy>
)

SummaryGroupBy является классом enum. Если я сделаю запрос, передав один параметр groupBy (/summary?groupBy=region), объект класса данных будет успешно создан. Но если я передаю несколько groupBy (/summary/groupBy=region,date), я получаю следующую ошибку:

[Field error in object 'SummaryRequest' on field 'groupBy': rejected value [region,date]; codes [typeMismatch.SummaryRequest.groupBy,typeMismatch.groupBy,typeMismatch.java.util.List,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [SummaryRequest.groupBy,groupBy]; arguments []; default message [groupBy]]; default message [Failed to convert value of type 'java.lang.String[]' to required type 'java.util.List'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [api.domain.SummaryGroupBy] for value 'region,date'; nested exception is java.lang.IllegalArgumentException: No enum constant api.domain.SummaryGroupBy.REGION,DATE]]

Но самое смешное то, что это работает, если я заменю SummaryRequest на обычный класс (как показано ниже). Итак, я озадачен, почему он не работает с классами данных.

class SummaryRequest {
    var groupBy: List<SummaryGroupBy> = ArrayList
}

У меня есть jackson-module-kotlin в качестве зависимости. Почему Джексон не может десериализовать список в классе данных? Есть ли обходной путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...