Я хочу считать данные из запроса POST в Java-сервлете .Этот сервлет работает на Geoserver как служба и вызывается с URL.
POST-запрос (создается с помощью скрипта Python):
POST http://localhost:8080/geoserver/ows?request=upload&service=GeoTransfer&version=1.0.0 HTTP/1.1
Host: localhost:8080
User-Agent: python-requests/2.20.0
Accept-Encoding: gzip, deflate
Accept: application/xml
Connection: keep-alive
Authorization: admin:admin
fileName: transfer.xml
Content-Type: application/xml
Content-Length: 489
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<transfer>
<enviroment>Test</enviroment>
<product>Testproduct</product>
<user>admin</user>
</transfer>
Java-сервлет:
public void upload(HttpServletRequest request, httpServletResponse response)
throws ServletException, IOException {
System.out.println("===== Begin headers =====");
Enumeration<String> names = request.getHeaderNames();
while (names.hasMoreElements()) {
String headerName = names.nextElement();
System.out.println(headerName + " = " + request.getHeader(headerName));
}
System.out.println("===== End headers =====\n");
System.out.println("===== Begin Body =====");
if ("POST".equalsIgnoreCase(request.getMethod())) {
try {
Scanner s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("\\A");
System.out.println(s.hasNext() ? s.next() : "");
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("===== End Body =====\n");
}
Вывод:
===== Begin headers =====
Authorization = admin:admin
fileName = transfer.xml
Accept = application/xml
User-Agent = python-requests/2.20.0
Connection = keep-alive
Host = localhost:8080
Accept-Encoding = gzip, deflate
Content-Length = 489
Content-Type = application/xml
===== End headers =====
===== Begin Body =====
===== End Body =====
Проблема:
Почему я не могу прочитать тело данных xml?Что-то не так с запросом, и данные не передаются в Java?
EDIT1:
Попробуйте другие методы с Inputstream, но тело всегда пустая строка.Может ли быть проблема в том, что Сервер игнорирует Тело и использует только заголовок, если он создает объект запроса?
Edit2:
Попробуйте ответить Маджиду Хаквани и получите пустую строку.Я печатаю request.getContentLength()
и это 489
.Получил ли метод этот номер из заголовка или реальной длины контента из запроса объекта?