实现接口
使用注解(简单)
最近做项目在通过异常控制返回值code码,初步思路是定义一个全局异常处理器,上面刚说到有两种方法,先讲第一种.
HandlerExceptionResolverspringmvc给我们提供了可以扩展的接口HandlerExceptionResolver,实现此接口,重写处理异常方法.此方法有些不好用的是在返回值上面.强制我们返回model and view,如果想要返回json,则还需要自己转换一层,下文写到了.
package org.springframework.web.servlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.lang.Nullable;public interface HandlerExceptionResolver {
@Nullable
ModelAndView resolveException(
HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex);
}如果model and view要转换成普通json返回,则需要手动转换一层:
MappingJackson2JsonView jackson2JsonView = new MappingJackson2JsonView(); //设置返回的json map Map returnData = Maps.newHashMap(); //TODO add return data jackson2JsonView.setAttributesMap(returnData); ModelAndView view = new ModelAndView(); view.setView(jackson2JsonView); return view;简单方法(使用注解)
在开始说这个之前,我们要先了解一下相关的两个注解
@ControllerAdvice,注释大致意思就是 controllerAdvice是一个用于定义@ExceptionHadnler的Component注解.适用于所有的@RequestMapping方法
@ExceptionHandler:需要处理的异常,如果不传值默认处理所有异常
使用方法:
import com.immomo.moaservice.live.assess.impl.exception.ActivityAnalyticsException;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvicepublic class ActivityExceptionHandler {
@ExceptionHandler(ActivityAnalyticsException.class)
@ResponseBody
public ResultUtil resolveException(ActivityAnalyticsException e) { return ResultUtil.build(e.getCodeEnum());
}
}
作者:H_Man
链接:https://www.jianshu.com/p/7a62d10c3db3



