gpt4 book ai didi

java - 我有一个带有 @ExceptionHandler 的父类和一个带有自己版本的子类。我收到一个不明确的方法错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:06 24 4
gpt4 key购买 nike

父级:

@ExceptionHandler(NoUserException.class)
protected ModelAndView handleException(NoUserException e) {
Map<String, Object> model = new HashMap<String, Object>();

model.put(ModelKeys.HOST_KEY, "message");

return new ModelAndView("noAccess",model);
}

child :

@ExceptionHandler(NoUserException.class)
protected void handleException(NoUserException e, HttpServletRequest request, HttpServletResponse response) throws IOException {
logger.error("Invalid user.");
respond(CLIENT_USER_ERROR,response);
}

是的,我确实需要它们具有不同的参数和输出。

最佳答案

您不能有两个方法具有相同的异常处理程序,抱歉,它只是不受支持。解析它们的代码不区分超子类,并认为子类“更具体”。如果您有兴趣,代码在 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver 中。根据确实在 Controller 上直接考虑方法比继承方法更具体的结果的方法,使您自己的 AbstractHandlerExceptionResolver 实现并不难。

编辑:个人评论,随着时间的推移,我发现在制作 Spring MVC 注释驱动的 Controller 时,我最好抑制使用“继承作为模板工具”的冲动。 View 代码有时天生笨拙且程序化,这就是我们首先创建一个单独的“ View 层”的原因。一种过于微观的 DRY 和“重用”方法在这里对你没有用。如果它违反了 Liskov 替换原则,我不会这样做。当然是 YMMV。

关于java - 我有一个带有 @ExceptionHandler 的父类和一个带有自己版本的子类。我收到一个不明确的方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com