Discuss / Java / 所有的思考题都是google题,靠自己瞎琢磨/瞎翻文档根本琢磨不出来,但是网上一搜就搜到了标准答案

所有的思考题都是google题,靠自己瞎琢磨/瞎翻文档根本琢磨不出来,但是网上一搜就搜到了标准答案

Topic source

我甚至在琢磨怎么用Interceptor拦截Exception:用postHandle()吧,没法捕获Controller方法的异常,根本拿不到异常信息;用afterCompletion()吧,ModelAndView已经渲染了,总不能自己手动再写个response吧。

琢磨半天我还是放弃了,还是google吧,发现办法居然如此简单:

https://howtodoinjava.com/spring-core/spring-exceptionhandler-annotation/#4

直接写一个类里面弄上handleUnknowException方法,标注上@ControllerAdvice就行了:

@ControllerAdvice
public class InternalExceptionHandler {

	@ExceptionHandler(RuntimeException.class)
	public ModelAndView handleUnknowException(Exception ex) {
		return new ModelAndView("500.html", Map.of("error", ex.getClass().getSimpleName(), "message", ex.getMessage()));
	}

}

等效于在所有的Controller里写上了

	@ExceptionHandler(RuntimeException.class)
	public ModelAndView handleUnknowException(Exception ex) {
		return new ModelAndView("500.html", Map.of("error", ex.getClass().getSimpleName(), "message", ex.getMessage()));
	}

另外文末的oginException应该是LoginException

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

其实你在父类写个handleUnknowException()就可以了,因为controller实际上按url分类不会太多,统一继承base-controller是完全可行的,公共方法也放base

深蓝738

#3 Created at ... [Delete] [Delete and Lock User]

老师,我想在评论区要一个点赞功能


  • 1

Reply