当我抛出一个Throwable时,我希望在我的硬盘驱动器上保存请求信息以进行调试。这是可能的?
例如:
@Provider
public class DefaultExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Throwable exception) {
exception.printStackTrace();
JSONObject msg = new JSONObject();
msg.put("msg", "Try again.");
// i need something like this
JSONObject request = SuperEspecialClass.getActualRequest().parseToJSON();
request.saveOnHardDriveForDebugLater();
/**request contains -> all headers
request contains -> all parameters
request contains -> body
request contains -> method
request contains -> URI
like this :
{
url : '/url',
method : '',
headers : [],
params : [],
body : ''
}*/
return Response
.serverError()
.entity(msg)
.build();
}
}
带有@Context HttpServletRequest
的表格参数消失了。身体不可能与request.getReader()
结合。
答案 0 :(得分:0)
可能没有官方API可以再次获取输入参数,这意味着再次读取请求InputStream。
您可以实现一个 Interceptor ,它会在继续处理请求之前保存方法参数,并在发生异常时检索它们。您必须特别注意拦截器的线程安全性:您不希望混合来自不同请求的异常和参数。 另请注意,在请求的反序列化,验证或匹配期间可能会出现异常,在这种情况下,您根本就没有参数。