@ControllerAdvice -- 处理异常示例
Class : SessionInterceptor
package com.estate.web.filter; import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.ucenter.api.exception.SessionException;
import com.ucenter.api.exception.SignatureException;
import com.ucenter.api.exception.TimeOutException;
import com.ucenter.api.session.bean.Result;
import com.ucenter.api.session.service.IWebSessionService; public class SessionInterceptor extends HandlerInterceptorAdapter {
@Resource
private IWebSessionService webSessionService; @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 从request中获取sessionid
String sessionid = request.getParameter("sessionid");
if (StringUtils.isBlank(sessionid)) {
// 从cookies中获取sessionid
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("sessionid".equals(cookie.getName())) {
sessionid = cookie.getValue();
}
}
}
}
if (StringUtils.isBlank(sessionid))
throw new SessionException();
// 获取时间戳
long timestamp = NumberUtils.toLong(request.getParameter("timestamp"), 0);
if (timestamp <= 0)
throw new TimeOutException();
// 获取签名
String signature = request.getParameter("signature");
if (StringUtils.isBlank(signature))
throw new SignatureException();
// dubbo校验
Result result = webSessionService.checkSessionid(sessionid, signature, timestamp); // 校验成功,将sessionid放入request对象中
request.setAttribute("sessionid", sessionid);
request.setAttribute("ecid", result.getEcid());
request.setAttribute("uid", result.getUid());
return true; } @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
}
Class : GlobalExceptionHandler
package com.xindatai.ibs.web.exception; import java.io.IOException; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.ucenter.api.exception.SessionException;
import com.ucenter.api.exception.SignatureException;
import com.ucenter.api.exception.TimeOutException;
import com.xindatai.common.web.resp.BaseRespWriter; @ControllerAdvice
public class GlobalExceptionHandler {
public static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "IOException occured")
@ExceptionHandler(IOException.class)
@ResponseBody
public void handleIOException() {
// returning 404 error code
} @ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(TimeOutException.class)
public void timeOutException(HttpServletRequest request, HttpServletResponse response, TimeOutException ex) throws IOException {
outputMessage(response, JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect));
// return JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect);
} @ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(SessionException.class)
public void sessionException(HttpServletRequest request, HttpServletResponse response, SessionException ex) throws IOException {
outputMessage(response, JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect));
// return JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect);
} // @ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(SignatureException.class)
public void tokenException(HttpServletRequest request, HttpServletResponse response, SignatureException ex) throws IOException {
outputMessage(response, JSON.toJSONString(ex.getWriter(), SerializerFeature.DisableCircularReferenceDetect));
} @ExceptionHandler
@ResponseBody
public void handleException(HttpServletRequest request, HttpServletResponse response, Exception e) throws IOException {
LOGGER.error("API Exception! ", e);
BaseRespWriter writer = new BaseRespWriter();
writer.setErrMsg("API Exception!");
outputMessage(response, JSON.toJSONString(writer));
} @ResponseStatus(HttpStatus.OK)
@ResponseBody
@ExceptionHandler(BindException.class)
public void bindException(HttpServletRequest request, HttpServletResponse response, Exception e) throws IOException {
LOGGER.error("Param Exception! ", e);
BaseRespWriter writer = new BaseRespWriter();
writer.setErrMsg("Param Exception!");
outputMessage(response, JSON.toJSONString(writer));
} private void outputMessage(HttpServletResponse response, String errMsg) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json");
ServletOutputStream os = response.getOutputStream();
os.write(errMsg.getBytes("utf-8"));
} }
啦啦啦
@ControllerAdvice -- 处理异常示例的更多相关文章
- @ControllerAdvice 拦截异常并统一处理(转载)
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
- @ControllerAdvice全局异常拦截
@ControllerAdvice 拦截异常并统一处理 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder ...
- Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
- Spring Boot 系列 @ControllerAdvice 拦截异常并统一处理
ControllerAdvice用法解析 简介 通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置. 注解了@Controller的类的方法可以使用@Exception ...
- @ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
- 精通Spring Boot---使用@ControllerAdvice处理异常
在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...
- SpringBoot - @ControllerAdvice 处理异常
在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...
- 使用@ControllerAdvice处理异常
在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...
- SpringBoot 之 @ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
随机推荐
- 【C】——可变参数
写代码之前要先介绍一下可变参数的备用知识: C函数要在程序中用到以下这些宏: void va_start( va_list arg_ptr, prev_param ); type va_arg( va ...
- openvpn 客户端配置
clientdev tunproto tcpremote xx.xx.xx.xx 1194resolv-retry infinitenobindpersist-keypersist-tunca c ...
- WPF/SL: lazy loading TreeView
Posted on January 25, 2012 by Matthieu MEZIL 01/26/2012: Code update Imagine the following scenario: ...
- git之移除.idea
有时候不小心提交了.idea目录,git会一直track这个目录,可以通过一下命令移除: mv .idea ../.idea_backup rm -r .idea git rm -r .idea gi ...
- Global Pose Estimation with an Attention-based Recurrent Network
related work包含比较多,对SLAM和最近神经网络对于定位的工作介绍比较多.
- Java如何中断正在运行的线程?
在Java编程中,如何中断正在运行的线程? 以下示例演示如何使用Thread类的interrupt()方法中断正在运行线程,并检查线程是否使用isInterrupted()方法中断. package ...
- (转)FFmpeg源代码简单分析:avformat_open_input()
目录(?)[+] ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结 ...
- openssl创建自己的CA certificate
Create a Certificate Authority private key (this is your most important key): $ openssl req -new -ne ...
- Aspose.Words对于Word的操作
对于word操作一般是对已有word模板的操作,直接新建的不考虑,网上教程很多,自己看吧一般有以下几种办法(忘了具体几种了,一般情况下以下就够了)1.通过书签替换顾名思义,就是先定义一个书签,然后在书 ...
- mongodb 学习1
基本概念 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式( 文件存储格式为BSON(一种JS ...