Я сталкиваюсь с странной проблемой в проекте Spring Boot, где тело не получает в контроллере. Java 8, BC JDK8ON 1.78.1.
Я взял трассы TCPdump. Header скажите мне, что он там.
Вот скриншот TCPDUMP:
my stognaller: p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> p>.public void anyRequest(@RequestHeader(value = CONTENT_TYPE, required = false) String requestContentType,
@RequestHeader(value = HEADER_X_ADMIN_PROTOCOL) String adminProtocol,
@RequestHeader(value = HEADER_X_ADMIN_FROM) String adminFrom,
@RequestHeader(value = HEADER_X_ADMIN_RESUME, required = false, defaultValue = "false") boolean adminResume,
@RequestHeader(value = HEADER_X_ADMIN_SCRIPT_STATUS, required = false) String adminScriptStatus,
@RequestBody(required = false) byte[] body, final HttpServletRequest request,
final HttpServletResponse response) throws InterruptedException, IOException {
< /code>
Там я обычно получаю тело таким: < /p>
Long contentLength = request.getContentLengthLong();
log.info("Request Content lenght in header: {}", contentLength);
if (body != null) {
log.info("body content {} ", Hex.encodeHexString(body));
}
< /code>
И снова работает 99 % случаев. Но когда я использую определенное устройство, это не так, тело остается нулевым.if (body == null && contentLength > 0) {
log.warn("Body seems null while Content length Header is {} ", contentLength);
log.info("Trying alternative way to retreive the body {} ", contentLength);
InputStream is = request.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
body = buffer.toByteArray();
}
< /code>
Попробуйте номер 2: (это фактически возвращает байт -массив нулей, но это стоило попробовать) < /p>
private byte[] alternateBodybytes(InputStream serveltInputStream, int contentLength) throws IOException {
byte[] bytes = new byte[contentLength];
for (int r, offset = 0; (r = serveltInputStream.read(bytes, offset, bytes.length - offset)) > -1;) {
offset += r;
}
return bytes;
}
< /code>
У меня в настоящее время не хватает вариантов, и я ищу предложения, если у вас есть, ребята? время. < /li>
< /ul>
Что вы думаете? Есть совет? src = "https://i.sstatic.net/ddtu9ug4.jpg"/>
Подробнее здесь: https://stackoverflow.com/questions/790 ... -http-body