@ControllerAdvice是放在一个类上面做注解,
-
返回string或者json需要@ResponseBody
-
用RestControllerAdvice,就不用加@ResponseBody了
-
@ExceptionHandler用来修饰这个类里面的方法,@ExceptionHandler括号里面可以加入详细的异常类型,如这种形式:@ExceptionHandler({IOException.class} )(花括号里面可以放入自定义异常的class,比如你已经定义了一个缺少servlet请求参数抛出的异常,那么就可以在这个注解的括号里写{MissingServletRequestParameterException.class} )
这里有个注解:@ResponseStatus注解有两种用法,一种是加载自定义异常类上,一种是加在目标方法中
那我们首先类说一下加在目标方法上的这种情况,注解中有两个参数,value属性设置异常的状态码,reaseon是异常的描述,
需要重点注意的是不管该方法是不是发生了异常,将@ResponseStatus注解加在目标方法上,一定会抛出异常。如果只是为了指示返回状态码,最好不要添加reason属性。
如果添加了reason属性,且reason不为"",且code > 0(哪怕状态码是200),会对当前请求走错误处理。但是如果没有发生异常的话方法还是会正常执行完毕。
第二种是将@ResponseStatus注解加在自定义异常类上
下图是抛出异常后页面的显示
还有另一种写法 @ExceptionHandler(value = Exception.class)这种的话你就可以在方法里面去判断具体是哪种异常,然后具体异常问题具体分析。
比如这个里面的操作,(EStatusCode是写的一个枚举类,里面是一些状态码提示信息等等)