在play框架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,我都可以获取布尔值。但无法获得实际的尸体。
答案 0 :(得分:0)
您可以获取请求正文并根据需要在操作组合中记录它:
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);
}
}