【问题标题】:Is there a way for ExceptionHandlers to output an argument when an unchecked exception is thrown?当抛出未经检查的异常时,ExceptionHandlers 有没有办法输出参数?
【发布时间】:2013-12-12 01:39:13
【问题描述】:
@Component
public class Fetcher {
    private void sendGet(String url) {
        someMethodThatCanThrowUncheckedException();
    }
}

@Controller
public class TestController {
    @Autowired
    private Fetcher fetcher;

    @RequestMapping(value = {"/content"}, method = RequestMethod.GET)
    @ResponseBody
    public String getContent(@RequestParam(value = "url", required = true) String url) {
        fetcher.sendGet(url);
        return "Success";
    }

    @ExceptionHandler({Exception.class})
    @ResponseBody
    public String handleUncaughtException(final Exception exception) {
        return "An internal error has occured trying to fetch url: " + url;
    }
}

我想要一种能够在handleUncaughtException 中输出变量url 的方法。但是,由于异常来自另一个类Fetcher,有什么方法可以知道url 参数可能导致这个未经检查的异常吗?

如果我错了,请纠正我,但我相信我不能只将url 作为字段存储在TestController 中,因为我同时调用了/content 端点。

【问题讨论】:

    标签: java spring debugging exception-handling unchecked


    【解决方案1】:

    您可以做的是在请求属性中设置url 并在您的@ExceptionHandler 中检索它。

    @RequestMapping(value = {"/content"}, method = RequestMethod.GET)
    @ResponseBody
    public String getContent(@RequestParam(value = "url", required = true) String url, HttpServletRequest request) {
        request.setAttribute("url", url);
        fetcher.sendGet(url);
        return "Success";
    }
    

    然后检索它

    @ExceptionHandler({Exception.class})
    @ResponseBody
    public String handleUncaughtException(final Exception exception, HttpServletRequest request) {
        String url = (String) request.getAttribute("url");
        if (url != null) 
            return "An internal error has occured trying to fetch url: " + url;
        else 
            return "something else";
    }
    

    您可能应该将属性键设为常量。

    【讨论】:

    • 谢谢!我决定改用 request.getParameter("url")
    • @Popcorn 如果url 来自请求参数,这将起作用。在任何其他情况下都不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2010-12-08
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多