Я пытаюсь получить тело запроса 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"}]}