[英]Restlet Filter Post request
我想在Filter
中Filter
Post
請求(在到達Resource
)。 為了過濾請求,我想從bode請求中檢索令牌並對其進行一些測試。
當前資源:
@Post
public JsonRepresentation init(JsonRepresentation jRep) {
String token = jRep.getJsonObject().getString("token");
.
.
.
}
當前過濾器:
@Override
protected int beforeHandle(Request request, Response response) {
int result = STOP;
String token = (String) Request.getCurrent().getAttributes().get("token");
.
.
.
}
這些代碼不會檢索令牌 。
我的問題是如何檢索身體要求?
您可以直接從其關聯的實體對象獲取請求的有效內容文本,如下所述:
Representation repr = request.getEntity();
String content = repr.getText();
希望對您有幫助,蒂埃里
您可以嘗試像這樣的運動來恢復身體:
公共靜態字符串getBody(HttpServletRequest request)引發IOException {
String body = null;
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;
}
}
}
body = stringBuilder.toString();
return body;
}
由於將請求實體直接存儲在內存中很危險(例如,如果客戶端發送了TB表示形式),那么該框架默認不會將表示形式持久存儲到內存中,因此只能(從套接字)讀取一次。
我想您可能會在這里找到答案: Restlet重用InputStream
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.