Получение Raw InputStream в Джерси JAX-RS - PullRequest
0 голосов
/ 06 марта 2019

У меня есть сторонняя служба, звонящая в мою конечную точку JaxRS.Это Content-Length неверно, фактически на 3 - 10 символов меньше всей полезной нагрузки сообщения.Мне нужно получить полную полезную нагрузку на стороне сервера.

Я создал ReaderInterceptor, чтобы попытаться изменить или удалить заголовок Content-Length.Тем не менее, когда я читаю поток, он все равно будет давать мне только количество байтов, первоначально в Content-Length.

, которое я тестировал с различными формами из Postman, и оно очень согласованно.

Как мне перейти к необработанному входному потоку, не ограниченному базовой библиотекой, к начальному Content-Length значению?

Использование InputStream или String в параметрах @Post не меняет результаты, поэтомуиспользование высокоприоритетного ReaderInterceptor.

@Provider
@Priority(0)
public class MyReaderInterceptor implements ReaderInterceptor {
    @Override
    public Object aroundReadFrom(final ReaderInterceptorContext context) throws IOException, WebApplicationException {
        context.getHeaders().remove("Content-Length");
        final InputStream inputStream = context.getInputStream();
        final byte[] bytes = new byte[inputStream.available()];
        final Integer sizeRead = inputStream.read(bytes);
        final String body = new String(bytes);
        context.setInputStream(new ByteArrayInputStream(body.getBytes()));
        return context.proceed();
    }
}
...