Как вы регистрируете KotlinModule для AWS лямбда-картографа объектов Джексона? - PullRequest
2 голосов
/ 04 марта 2020

Я использую Kotlin, чтобы написать AWS Lambda. У меня есть Kotlin класс данных

class MessageObject(
  val id: String,
  val name: String,
  val otherId: String
)

Этот класс данных используется в качестве входных данных для требуемой реализации интерфейса

class Handler : RequestHandler<MessageObject, Output> {
  ...  
  override fun handleRequest(msg: MessageObject, ctx: Context) {
    ...
  }
}

Когда я тестирую эту лямбду в консоли aws и передать ему правильное JSON сообщение, я получаю это:

An error occurred during JSON parsing: java.lang.RuntimeException
java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: 
com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Cannot construct instance of 'com.mycode.MessageObject'(no Creators, like default construct, exist): 
cannot deserialize from Object value (no delegate- or property-based Creator)

Я почти уверен, что это исправлено, сказав: ObjectMapper().registerModule(KotlinModule()) но в мире AWS Lambda как мне редактировать объект сопоставления предоставляется AWS?

1 Ответ

0 голосов
/ 13 апреля 2020

Если вы не получили его для работы с KotlinModule, поскольку проблема, с которой вы столкнулись, заключается в том, что Джексону нужен пустой конструктор по умолчанию, а у вас его сейчас нет. Вы можете просто изменить свой MessageObject следующим образом, и он должен работать:

  data class MessageObject(
  var id: String = "",
  var name: String = "",
  var otherId: String = ""
)

Я создал этот репозиторий с полнофункциональным kotlin лямбда-шаблоном, используя Serverless Framework. Посмотрите на другие лакомые кусочки, которые вам могут понадобиться: https://github.com/crafton/sls-aws-lambda-kotlin-gradlekt

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