Mutant first = request.body();
Mutant second = request.body();
log.info("First: {}, Second: {}", first,
Strings.isNullOrEmpty(second.value()) ? "None": second.value()
);yelds
第一个:{..my内容..},第二个:无
更新: Jooby库,仅供参考https://jooby.org
使用的请求对象:https://jooby.org/apidocs/org/jooby/request
我查看了反编译后的代码,看起来它们没有缓存body属性,所以如果您需要从多个路由访问request.body(),那么...
发布于 2019-06-07 16:56:47
是的,这是可能的,但需要一个变通方法。
您可以将此use块添加为应用程序的第一行。这允许您通过request.body()多次访问body。在内部,如果主体在所有情况下都太大,那么主体将被流式传输到内存并卸载到磁盘,这个变通方法只是确保每次都能获得相同的引用。
// Cache body in request scope
use("*", "*", (req, res, chain) -> {
final Mutant body = req.method().equalsIgnoreCase("post") ? req.body() : null;
Request.Forwarding wrappedReq = new Request.Forwarding(req) {
@Override
public Mutant body() throws Exception {
if(body != null) {
return body;
}
return super.body();
}
@Override
public <T> T body(Class<T> type) throws Exception {
return body().to(type);
}
};
chain.next(wrappedReq, res);
});在此块之后定义的任何筛选器或路由都可以多次获取请求正文。如果主体在这个use块之前就已经被请求了,那么它就不会工作。
发布于 2018-05-05 03:40:07
看起来不像。
Jooby将the in parameter (which is what request.body would eventually resolve to)实现为InputStream。InputStream不能倒带,而且它不会有任何上下文或能力这样做。因此,多次调用request.body()将使您的请求体恰好一次。
https://stackoverflow.com/questions/50181762
复制相似问题