Java Restlet过滤器Post请求

Java Restlet过滤器Post请求,java,restlet,Java,Restlet,我想在filter中过滤Post请求(在它到达资源之前)。 为了过滤请求,我想从bode请求中检索一个令牌,并对其进行一些测试 现有资源: @Post public JsonRepresentation init(JsonRepresentation jRep) { String token = jRep.getJsonObject().getString("token"); . . . } 当前筛选器: @Override protected int befo

我想在
filter
中过滤
Post
请求(在它到达
资源之前)。
为了过滤请求,我想从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");
  .
  .
  .
}
这些代码不会检索令牌


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

您可以尝试以下方法来检索正文:

公共静态字符串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;
}

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

公共静态字符串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();
希望它能帮助你,
Thierry

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

Representation repr = request.getEntity();
String content = repr.getText();
希望它能帮助你,
Thierry

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


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

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


我想你的问题的答案可以从这里读到:

我使用org-restlet
Request
,而不是
HttpServletRequest
我使用org-restlet
Request
,而不是
HttpServletRequest