Получить необработанное тело HttpRequest в Micronaut - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить тело запроса raw в контроллере Micronaut. Конечная точка должна использовать application / json, но нам нужен необработанный json для генерации подписи, которая должна соответствовать сигнатуре, найденной в заголовке. Независимо от того, какой тип @Body я установил или даже если я захватил HttpRequest.body, он был изменен. К сожалению, я реализую сторонний API, иначе я бы изменил тип содержимого на text / plain, и все будет работать нормально.

@Consumes(MediaType.APPLICATION_JSON)
 @Post("/controlMessages")
 open fun recvControl2(@Header("signature")  signature: String, request: HttpRequest<Any>, @Body payload: Any): HttpResponse<Any> {
     LOG.info("body=${request.body.get()}")

     when(isBodyValid(signature, request.body.get())){
         true -> return HttpResponse.ok()
         false -> return HttpResponse.unauthorized()
     }
 }

Обратите внимание, что DefaultHttpClient показывает неизмененное тело


    Sending HTTP Request: POST /controlMessages
    DefaultHttpClient - Chosen Server: localhost(27813)
    DefaultHttpClient - signature: 8e85acdb42cb5e14e15f1fbd954a8e98f1912fa1283bace5913
    DefaultHttpClient - host: localhost:27813
    DefaultHttpClient - connection: close
    DefaultHttpClient - content-type: application/json
    DefaultHttpClient - content-length: 103
    DefaultHttpClient - Request Body
    DefaultHttpClient - ----
    DefaultHttpClient - {"cancelControlMessages": [
     {"remoteId": "some-remote-id", "sentAt": "2019-11-06T14:55:15.603698Z"}
    ]}
    DefaultHttpClient?[0;39m - ----
    ControlController?[0;39m - body={"cancelControlMessages":[{"remoteId":"some-remote-id","sentAt":"2019-11-06T14:55:15.603698Z"}]}

...