Restlet 过滤器 Post 请求

Restlet Filter Post request

我想过滤 Filter 中的 Post 请求(在到达 Resource 之前)。 为了过滤请求,我想从 bode 请求中检索一个 token 并对其进行一些测试。

当前资源:

@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");
  .
  .
  .
}

这些代码不会检索 令牌

我的问题是如何检索正文请求?

你可以尝试这样的方法来找回尸体:

public static String getBody(HttpServletRequest 请求) 抛出 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;
}

您可以直接从其关联的实体对象中获取请求的负载文本,如下所述:

Representation repr = request.getEntity();
String content = repr.getText();

希望对你有帮助, 蒂埃里

由于将请求实体直接存储到内存中是危险的(想象一下如果客户端发送 tera 字节表示),默认情况下框架不会将表示持久保存到内存中,它们只能读取一次(从套接字).

我想您的问题的答案可以从这里阅读: