Микронавт Lambda с прокси не может демаршировать объект из тела json io.micronaut.web.router.exceptions.UnsatisfiedRouteException
В лямбде Micronaut с интеграцией прокси у меня есть контроллер, который должен демаршировать контент JSON в объект Ping:
@Controller("/ping")
class PingController {
private val logger = LoggerFactory.getLogger(javaClass)
@Get("/")
fun getPing(@Header("Host") host: String): Ping {
logger.info("Host Header {}", host)
return Ping("myPing")
}
@Post("/")
@Status(HttpStatus.CREATED)
fun createPing(@Body ping: Ping): Ping {
logger.info("ping {}", ping)
return ping
}
}
Если я запускаю это приложение как локальное веб-приложение для микронавтов, я могу выполнить это успешно:
curl -X POST localhost:8080/ping -d '{"value": "myvalue"}' -H "Content-type: application/json"
Информация журнала:
INFO m.aws.api2.poc.PingController - ping Ping(value=myvalue)
Однако, когда этот метод контроллера вызывается из AWS API Manager, передавая заголовок Content-Type и информацию о теле...
... это не удается:
14:56:18
io.micronaut.web.router.exceptions.UnsatisfiedRouteException: Required argument [Ping ping] not specified
14:56:18
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:279)
14:56:18
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
14:56:18
at io.micronaut.function.aws.proxy.MicronautLambdaContainerHandler.lambda$null$1(MicronautLambdaContainerHandler.java:240)
14:56:18
at io.reactivex.internal.operators.flowable.FlowableDefer.subscribeActual(FlowableDefer.java:35)
14:56:18
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
14:56:18
at io.reactivex.Flowable.subscribe(Flowable.java:14752)
14:56:18
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
Как ни странно, сортировка Ping
объект в @Get
Call работает как веб-приложение и как лямбда.
Я загрузил пример проекта в Github: https://github.com/codependent/micronaut-aws-lambda-proxy
2 ответа
Была ошибка в micronaut-function-aws-api-proxy
lib, я сообщил об этом ( https://github.com/micronaut-projects/micronaut-aws/issues/10) и сразу исправил в io.micronaut.aws:micronaut-function-aws-api-proxy:1.1.0.RC1
Я отчаянно пытаюсь использовать Micronaut на работе, потому что он хорошо подходит для Lambda. ИМХО, однако, попробовал проект Github https://github.com/codependent/micronaut-aws-lambda-proxy и MicronautLambdaContainerHandlerTest не удалось с кодом состояния из 404. Так что, с моей точки зрения, ошибка все еще присутствует в io.micronaut.aws:micronaut-function-aws-api-proxy:1.1.0.RC1
Тест не удался с этим:
com.codependent.micronaut.awslambda.web.MicronautLambdaContainerHandlerTest> должен возвращать правильно сформированное тело () FAILED org.opentest4j.AssertionFailedError: ожидается: <201>, но было: <500>
Не могли бы вы подтвердить, должен ли проект собираться с Gradle с помощью io.micronaut.aws:micronaut-function-aws-api-proxy:1.1.0.RC1? Спасибо