Я создаю простой сервис 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
в качестве зависимости. Почему Джексон не может десериализовать список в классе данных? Есть ли обходной путь?