繁体   English   中英

如何在Jersey的ExceptionMapper上获取请求的信息

[英]How to get informations of request on ExceptionMapper of Jersey

当我抛出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()

可能没有官方API可以再次获取输入参数,这将意味着再次读取请求InputStream。

您可以实现一个拦截器 ,该拦截器在进行请求之前保存方法参数,并在出现异常的情况下进行检索。 您必须特别注意拦截器的线程安全性:您不想混合来自不同请求的异常和参数。 另请注意,在反序列化,验证或请求匹配期间可能会发生异常,在这种情况下,您根本没有参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM