簡體   English   中英

Restlet過濾器發布請求

[英]Restlet Filter Post request

我想在FilterFilter 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM