Как получить доступ к телу HTTP-запроса с помощью RESTEasy

Я ищу способ прямого доступа к телу HTTP-запроса. На самом деле в своем коде я получаю в теле разные параметры и заранее не знаю, что именно я получу. Более того, я хочу быть как можно более гибким: я имею дело с разными запросами, которые могут различаться, и я хочу обрабатывать их одним методом для каждого типа запроса (GET, POST,...). Есть ли способ справиться с таким уровнем гибкости с помощью RESTEasy? Должен ли я переключиться на что-то другое?


person Raffo    schedule 27.09.2012    source источник
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