0

プロキシ統合を備えた Micronaut Lambda には、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
    }
}

このアプリケーションをローカルの micronaut webapp として起動すると、これを正常に実行できます。

curl -X POST localhost:8080/ping -d '{"value": "myvalue"}' -H "Content-type: application/json"

ログ情報:

INFO  m.aws.api2.poc.PingController - ping Ping(value=myvalue)

ただし、このコントローラーメソッドが Content-Type ヘッダーと本文情報を渡して AWS API Manager から呼び出されると...

ここに画像の説明を入力

...失敗します:


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、webapp とラムダの両方として機能します。

Github にサンプル プロジェクトをアップロードしました: https://github.com/codependent/micronaut-aws-lambda-proxy

4

1 に答える 1