这里简单记录一下。
- JAX-RS框架下的全局异常处理
主要是定制ExceptionMapper,作为jaxrs框架的provider,即可将rest接口实现里抛的异常截住,并转化为Response发送给前台。
一个样例是:
@Provider
public class MyExceptionHandler implements ExceptionMapper<MyException> {
@Override
public Response toResponse(MyException exception) {
MyResponse<Object> resp = new MyResponse<>();
resp.setCode(1);
// 根据异常错误码做国际化
String msg = I18N.getMessage(exception.getCode(), exception.getParams());
resp.setMessage(msg);
return Response.ok(resp).type(MediaType.APPLICATION_JSON_TYPE).build();
}
}
然后将provider bean配置到jaxrs的配置文件里:
<jaxrs:providers>
<ref bean="myExceptionHandler "/>
</jaxrs:providers>
- SpringMVC框架下的全局异常处理
使用@RestControllerAdvice+@ExceptionHandler注解,@ExceptionHandler描述要处理的异常类型,可以是多个异常类型:
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 默认的异常处理
*/
@ExceptionHandler(value = Exception.class)
public ResponseEntity<?> handleDefaultException(Exception ex) {
// 默认异常处理器DefaultExceptionHandler可定义为一个spring bean
BaseExceptionHandler<Exception> handler = findService(DefaultExceptionHandler.class);
return handler.handle(ex);
}