Я работаю над сервлетом и пытаюсь регистрировать запросы. Важной частью кода, вызывающего ошибку, является следующее:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
StringWriter writer = new StringWriter();
IOUtils.copy(request.getInputStream(), writer);
Message.Builder builder = something of type com.google.protobuf.GeneratedMessage.Builder;
builder.mergeFrom(writer.toString().getBytes());
}
Последняя строка кода выше приводит к следующему исключению:
com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
Однако, когда код переключен на:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
Message.Builder builder = something of type com.google.protobuf.GeneratedMessage.Builder;
builder.mergeFrom(request.getInputStream());
}
ошибки нет, и все отлично работает. В чем может быть проблема? Мне кажется, мне нужно что-то похожее на первый фрагмент кода, потому что мне нужно использовать поток ввода второй раз (один раз, чтобы записать его в файл, и один раз, чтобы обработать фактический запрос).