Тело необработанного HTTP-запроса в конечной точке App Engine

Я заинтересован в получении необработанного тела HTTP-запроса POST, который приходит к моей конечной точке при прямом вызове URL-адреса, где живет эта конечная точка (https://<my app name>.appspot.com/_ah/api/endpoints/v1/test) и снабжать организм этим. Вот метод конечной точки, который успешно вызывается:

 @ApiMethod(name = "test", path = "test", httpMethod = ApiMethod.HttpMethod.POST)
public WrappedBoolean test(final HttpServletRequest request, ServletContext servletContext) throws Exception {

    //???
    return new WrappedBoolean(true); 
}

К сожалению, пытаясь получить InputStream от HttpServletRequest и затем, читая его, дает мне -1, что означает, что все данные уже прочитаны. Это имеет смысл, поскольку среда выполнения конечных точек App Engine, скорее всего, уже обработала запрос.

Кто-нибудь имеет представление о том, как получить исходный запрос POST, который был отправлен в эту конечную точку?

1 ответ

Похоже, нет никакого способа восстановить исходное сообщение легко. Необходимо будет выполнить дополнительную манипуляцию - что-то вроде размещения фильтра перед запросом, чтения в запросе, сохранения его в атрибуте и захвата этого атрибута во время вызова конечной точки. Все это должно быть сделано осторожно, чтобы не испортить входной поток для управления средой выполнения SPI (конечными точками), в противном случае конечная точка вызываться не будет. Во всяком случае, слишком много хлопот. Я отказался делать что-то, для чего конечные точки действительно не предназначены, и просто использовал Java-сервлет.

Другие вопросы по тегам