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 字节表示),默认情况下框架不会将表示持久保存到内存中,它们只能读取一次(从套接字).
我想您的问题的答案可以从这里阅读:
我想过滤 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 字节表示),默认情况下框架不会将表示持久保存到内存中,它们只能读取一次(从套接字).
我想您的问题的答案可以从这里阅读: