Я ищу способ прямого доступа к телу HTTP-запроса. На самом деле в своем коде я получаю в теле разные параметры и заранее не знаю, что именно я получу. Более того, я хочу быть как можно более гибким: я имею дело с разными запросами, которые могут различаться, и я хочу обрабатывать их одним методом для каждого типа запроса (GET, POST,...). Есть ли способ справиться с таким уровнем гибкости с помощью RESTEasy? Должен ли я переключиться на что-то другое?
Как получить доступ к телу HTTP-запроса с помощью RESTEasy
comment
Я пытался использовать MessageBodyReaderInterceptor, но я даже не уверен, что это сделано для того, чтобы делать то, что я хочу. Насколько я знаю, обычно с RESTEasy вы пишете методы, которые принимают POJO или несколько параметров, но я их не знаю, поэтому не могу их указать...
- person Raffo   schedule 27.09.2012
Ответы (1)
В соответствии с кодом, приведенным в этом ответе, вы можете получить доступ к объекту HTTPServletRequest.
Когда у вас есть объект HTTPServletRequest, вы должны иметь доступ к телу запроса, как обычно. Одним из примеров может быть:
String requestBody = "";
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
InputStream inputStream = request.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
char[] charBuffer = new char[128];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException ex) {
throw ex;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ex) {
throw ex;
}
}
}
requestBody = stringBuilder.toString();
person
Pritam Barhate
schedule
29.09.2012