在play framework java中找不到传入请求的请求正文。我需要在play框架api中记录所有传入的请求。为此,我尝试使用过滤器和动作组合。但我能够获得请求正文。
我尝试使用过滤器和动作组合。
public class LoggingFilter extends EssentialFilter {
private final Executor executor;
@Inject
public LoggingFilter(Executor executor) {
super();
this.executor = executor;
}
@Override
public EssentialAction apply(EssentialAction next) {
return EssentialAction.of(request -> {
long startTime = System.currentTimeMillis();
Accumulator<ByteString, Result> accumulator = next.apply(request);
System.out.println(request);
return accumulator.map(result -> {
long endTime = System.currentTimeMillis();
long requestTime = endTime - startTime;
Logger.info("{} {} took {}ms and returned {}",
request.method(), request.uri(), requestTime, result.status());
return result.withHeader("Request-Time", "" + requestTime);
}, executor);
});
}
}从这个请求中,我只能得到body是否存在的布尔值。但不能得到真正的身体。
发布于 2019-09-14 14:12:13
您可以获取请求正文,并将其记录在action组合中:
import play.Logger;
import play.mvc.Http;
import play.mvc.Result;
import java.util.concurrent.CompletionStage;
public class ClientLogger extends play.mvc.Action.Simple {
public CompletionStage<Result> call(Http.Context context) {
StringBuffer logMessage = new StringBuffer();
logMessage.append(context.request().toString())
.append("\n")
.append("body json: " + context.request().body().asJson().toString());
Logger.info(logMessage.toString());
return delegate.call(context);
}
}https://stackoverflow.com/questions/56678508
复制相似问题