Scalatra,使用Gzip编码处理POST请求

Scalatra,使用Gzip编码处理POST请求,scala,http-post,gzip,scalatra,content-encoding,Scala,Http Post,Gzip,Scalatra,Content Encoding,我有一个带有POST方法的ScalatraAPI,它由发送gzip编码消息的外部API调用。但是我无法阅读post请求的正文,当我尝试阅读post正文或尝试解压缩它时,我得到了一个异常: MalformedInputException: Input length = 1. 如果我将传入的POST请求路由到fiddler,fiddler将正确处理消息并声明消息已编码,解码后,我可以在请求主体中看到正确的消息 以下是我尝试过的东西: val body = new GZIPInputStream(n

我有一个带有POST方法的ScalatraAPI,它由发送gzip编码消息的外部API调用。但是我无法阅读post请求的正文,当我尝试阅读post正文或尝试解压缩它时,我得到了一个异常:

MalformedInputException: Input length = 1.
如果我将传入的POST请求路由到fiddler,fiddler将正确处理消息并声明消息已编码,解码后,我可以在请求主体中看到正确的消息

以下是我尝试过的东西:

val body = new GZIPInputStream(new ByteArrayInputStream(request.body.getBytes))
以下情况引发了相同的异常:

logger.info(s"Response body..." + request.body ) 
我还尝试将主体读取为json,但它不返回JNOTH:

logger.info(s"Response body...\n${parsedBody}" ) 
以下是帖子标题:

(Expect,100-continue)
(Connection,keep-alive)
(Content-Encoding,gzip)
(Content-Type,application/json)
(Content-Length,3500)
这是堆栈区域的一部分:

    Parsing the request body failed, because:
java.nio.charset.MalformedInputException: Input length = 1
        at java.nio.charset.CoderResult.throwException(Unknown Source) ~[na:1.8.0_45]
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[na:1.8.0_45]
        at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[na:1.8.0_45]
        at java.io.InputStreamReader.read(Unknown Source) ~[na:1.8.0_45]
        at java.io.BufferedReader.read1(Unknown Source) ~[na:1.8.0_45]
        at java.io.BufferedReader.read(Unknown Source) ~[na:1.8.0_45]
        at java.io.Reader.read(Unknown Source) ~[na:1.8.0_45]
        at scala.io.BufferedSource.mkString(BufferedSource.scala:96) ~[scala-library-2.11.6.jar:na]
        at org.scalatra.servlet.RichRequest$$anonfun$body$1.apply(RichRequest.scala:181) ~[scalatra_2.11-2.3.0.jar:2.3.0]
        at org.scalatra.servlet.RichRequest$$anonfun$body$1.apply(RichRequest.scala:176) ~[scalatra_2.11-2.3.0.jar:2.3.0]
        at scala.Option.getOrElse(Option.scala:121) [scala-library-2.11.6.jar:na]
        at org.scalatra.servlet.RichRequest.body(RichRequest.scala:176) ~[scalatra_2.11-2.3.0.jar:2.3.0]
        at org.scalatra.json.JsonSupport$class.parseRequestBody(JsonSupport.scala:29) [scalatra-json_2.11-2.3.0.jar:2.3.0]
        at impala.api.GreetingController.parseRequestBody(GreetingController.scala:13) [classes/:na]

可以在scalatra用户组的此处找到解决方案:


可以在scalatra用户组中找到解决方案: