6
我正在尋找一種方式來直接訪問HTTP請求的正文。事實上,在我的代碼中,我收到了身體中的不同參數,並且事先並不知道我會收到什麼。此外,我希望儘可能靈活:我正在處理不同的請求,這些請求可能會有所不同,我希望以每種請求類型(GET,POST,...)的單一方法處理它們。 有沒有辦法通過RESTEasy來處理這種靈活性水平?我應該改用別的東西嗎?如何使用RESTEasy訪問HTTP請求的正文
我正在尋找一種方式來直接訪問HTTP請求的正文。事實上,在我的代碼中,我收到了身體中的不同參數,並且事先並不知道我會收到什麼。此外,我希望儘可能靈活:我正在處理不同的請求,這些請求可能會有所不同,我希望以每種請求類型(GET,POST,...)的單一方法處理它們。 有沒有辦法通過RESTEasy來處理這種靈活性水平?我應該改用別的東西嗎?如何使用RESTEasy訪問HTTP請求的正文
根據this answer中給出的代碼,您可以訪問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();
我嘗試使用MessageBodyReaderInterceptor但我也不確定是由做我想做的。據我所知,通常使用RESTEasy編寫接受POJO或多個參數的方法,但我不知道它們,所以我無法指定它們...... – Raffo