2015-08-20 4 views
0

Я объявляются маршруты с ключевым словом: compressResponseспрей Gzip кодированное сообщение, только если код состояния 200 OK

(compressResponse(Gzip) & respondWithMediaType(`application/json`)) { 
      super.routes 
} 

ret.status match { 

    case ResponseResult.StatSuccess => complete(200, ret.toString) 

    case _ => complete(InternalServerError, ret.toString) 

} 

Тем не менее, я обнаружил, что ret кодируется как Gzip только с завершением 200. 400, 500, спрей просто верните обычный текст.

+0

Да, это поведение по умолчанию, см https://github.com/spray/spray/blob/master/spray -httpx/SRC/основной/Scala/спрей/httpx/кодирование/Encoder.scala # L57. Вы можете определить собственную версию 'Gzip', используя' new Gzip (filter) 'где фильтр - это предикат, который решает, следует ли кодировать' HttpMessage'. – jrudolph

ответ

0
object AllGzip { 
    import MessagePredicate._ 
    val DefaultFilter = (isRequest || responseStatus(ret => ret.isSuccess || ret.isFailure)) && isCompressible 
} 

object AllEncodedGzip extends Gzip(AllGzip.DefaultFilter) { 
    def apply(messageFilter: MessagePredicate) = new Gzip(messageFilter) 
} 

изменение Gzip к AllEncodedGzip и спрей будет кодирует любой вид ответного сообщения на GZIP

Смежные вопросы