我想在Post
中过滤Filter
请求(在转到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");
.
.
.
}
这些代码不会检索令牌。
我的问题是如何检索正文请求?
答案 0 :(得分:2)
您可以直接从其关联的实体对象获取请求的有效内容文本,如下所述:
Representation repr = request.getEntity();
String content = repr.getText();
希望它可以帮到你, 亨利
答案 1 :(得分:1)
你可以尝试这样的东西来修复身体:
public static String 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;
}
答案 2 :(得分:1)
由于将请求实体直接存储到内存中是很危险的(想象一下,如果客户端发送tera-bytes表示),框架默认情况下不会将表示持久存储到内存中,它们只能被读取一次(来自套接字)。
我想您的问题的答案可以从这里阅读:Restlet reuse InputStream