Простая ошибка скользящего среднего с использованием пакета прогноза

Если вы не хотите писать больше данных в ответ, вам не нужно иметь дело с OutputStream. Просто используйте объект ответа:

@Provider
public class SomeFilter implements ContainerResponseFilter {

    private Logger LOG = LoggerFactory.getLogger(SomeFilter.class);

    @Override
    public void filter(ContainerRequestContext requestContext,
            ContainerResponseContext responseContext) throws IOException {
        LOG.info("response entity: " + responseContext.getEntity());
    }

}

OutputStream пуст во время вызова фильтра, потому что время выполнения JAX-RS не записано на него. После вашего фильтра среда выполнения выберет правильный MessageBodyWriter , который будет сериализовать объект в OutputStream.

Вы также можете перехватить все MessageBodyWriters с помощью WriterInterceptor . Следующий пример передает ByteArrayOutputStream в MessageBodyWriter и затем восстанавливает исходный OutputStream:

@Provider
public class ResponseInterceptor implements WriterInterceptor {

    private Logger LOG = LoggerFactory.getLogger(ResponseInterceptor.class);

    @Override
    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
        OutputStream originalStream = context.getOutputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        context.setOutputStream(baos);
        try {
            context.proceed();
        } finally {
            LOG.info("response body: " + baos.toString("UTF-8"));
            baos.writeTo(originalStream);
            baos.close();
            context.setOutputStream(originalStream);
        }
    }

}

0
задан Sotos 5 March 2019 в 12:49
поделиться

1 ответ

Ваш пример не воспроизводим, потому что вы не предоставили данные.

Следующий пример воспроизводим и не дает ошибки.

library(smooth)
forecast(sma(USAccDeaths))

Обратите внимание, что используемая здесь функция forecast не является частью пакета fpp2. Это из гладкой упаковки.

Чтобы проверить, что происходит с вашим примером:

  • Сначала проверьте, правильно ли считываются ваши данные.
  • Затем убедитесь, что функция sma возвращает что-то разумное. Сообщение об ошибке указывает на то, что функция не возвращает модель, которую она должна.
0
ответ дан Rob Hyndman 5 March 2019 в 12:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: