spring-mvc.xml
<!-- json轉換器 --> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" id="jsonMessageConverter"> </bean> <!-- 統一異常處理類,需要在web.xml中將默認的異常處理器關閉 --> <bean class="com.xxx.common.fitter.TokenExceptionResolver" id="handlerExceptionResolver"> <!-- 注入一個json轉換器 --> <property name="jsonMessageConverter" ref="jsonMessageConverter"> </property></bean>
切面類
只是滿足條件后,拋出異常
throw new TokenException("無權限");
TokenExceptionResolver類
import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.http.server.ServletServerHttpResponse; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import com.xxx.common.bean.JsonResultBean; import com.xxx.common.util.EifiniConstant; import com.xxx.common.exception.TokenException; public class TokenExceptionResolver implements HandlerExceptionResolver{ // json轉換器 // 將異常信息轉json private HttpMessageConverter<JsonResultBean> jsonMessageConverter; public HttpMessageConverter<JsonResultBean> getJsonMessageConverter() { return jsonMessageConverter; } //依賴注入三種方式之一setter注入 public void setJsonMessageConverter( HttpMessageConverter<JsonResultBean> jsonMessageConverter) { this.jsonMessageConverter = jsonMessageConverter; } @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { TokenException tokenException; if(ex instanceof TokenException){ tokenException = (TokenException)ex; // 異常信息解析 HttpOutputMessage outputMessage = new ServletServerHttpResponse(response); try { //將exceptionResultInfo對象轉成json輸出,這里使用spring異常處理的工具 jsonMessageConverter.write(new JsonResultBean(EifiniConstant.ERROR,tokenException.getMessage()), MediaType.APPLICATION_JSON, outputMessage); } catch (HttpMessageNotWritableException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }else{ // tokenException = new TokenException("未知錯誤"); } return new ModelAndView(); } }
