SSM笔记(3)—— 统一异常处理

  • 目录结构

在这里插入图片描述

  • 调用关系

在这里插入图片描述

  • 具体代码
  1. OEException.java
public class OEException extends RuntimeException{//注:spring 对于 RuntimeException 异常才会进行事务回滚。
	private static final long serialVersionUID = 1L;
		private Integer code;
	    private String message;
	    /**
	     * 有参构造器(异常信息封装)
	     * @param resultEnum:异常信息体
	     */
	    public OEException(ResultEnum resultEnum) {
	        this.message = resultEnum.getMessage();
	        this.code = resultEnum.getCode();
	    }

		public Integer getCode() {
			return code;
		}

		public void setCode(Integer code) {
			this.code = code;
		}

		public String getMessage() {
			return message;
		}

		public void setMessage(String message) {
			this.message = message;
		}

	    
}
  1. OEExceptionHandler.java
@ControllerAdvice //注解将作用在 被 @RequestMapping 注解的方法上,捕获方法抛出的自定义异常
public class OEExceptionHandler {
	@ExceptionHandler(value = OEException.class)
    @ResponseBody
    public ResponseMessage handlerSellerException(OEException e){
        //返回异常信息到前端
		return ResponseMessageUtil.info(e.getCode(),e.getMessage());
		//可以自定义错误页面,并返回页面
    }

}
  1. ResponseMessage.java
public class ResponseMessage implements Serializable{
	private static final long serialVersionUID = 1L;
	private Object data;//数据
	private String message;//信息
	private Integer code;//代码:如200、400、404
	
	public ResponseMessage(Object data, String message, Integer code) {
		super();
		this.data = data;
		this.message = message;
		this.code = code;
	}
	
	public ResponseMessage() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public Integer getCode() {
		return code;
	}
	public void setCode(Integer code) {
		this.code = code;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
}
  1. ResponseMessageUtil.java
public class ResponseMessageUtil {
   /**
	* 发送应答信息
	* @param code
	* @param msg
	* @return
	*/
	public static ResponseMessage info(Integer code,String msg) {
	   	ResponseMessage responseMessage = new ResponseMessage();
	    responseMessage.setCode(code);//设置返回的代码
		responseMessage.setMessage(msg);//设置返回的信息
	       return responseMessage;
	}

}

  1. ResultEnum.java
public enum ResultEnum {
	SUCCESS(0,"成功"),

    PARAM_ERROR(1,"参数不正确"),
    
    PARAM_IS_EMPTY(2,"参数为空"),

    ADD_ERROR(11,"新增失败"),

    DELETE_ERROR(12,"删除失败"),

    UPDATE_ERROR(13,"更新失败"),

    DATA_NOT_EXIST(14,"数据不存在"),

    PAPER_FORM_ERROR(21,"试卷生成失败"),
    
    PAPER_PUBLISH_ERROR(22,"试卷发布失败"),
    
    PAPER_ALREAD_SUBMIT(31,"试卷已提交"),
    
    PAPER_TIMEOUT(32,"试卷已过期"),
    
    PAPER_DISTRIBUTE_ERROR(33,"未分配试卷"),
    ;

    private Integer code;
    private String message;

    ResultEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

    
}
  • 抛出自定义异常
    throw new OEException(ResultEnum.DATA_NOT_EXIST);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM框架的全局异常处理一般可以通过以下步骤实现: 1. 在Spring配置文件中配置异常解析器(HandlerExceptionResolver),以捕获所有Controller中抛出的异常。 2. 实现一个自定义异常类,并继承Exception类,用于在程序中抛出自定义异常。 3. 在Controller中抛出自定义异常,并在自定义异常类中添加构造函数,以方便传递异常信息。 4. 在异常解析器中处理异常,根据异常类型返回不同的错误信息。 下面是一个简单的实现示例: 1. 在Spring配置文件中配置异常解析器: ``` <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.Exception">error</prop> </props> </property> <property name="defaultErrorView" value="error"/> </bean> ``` 2. 自定义异常类: ``` public class MyException extends Exception { public MyException(String message) { super(message); } } ``` 3. 在Controller中抛出自定义异常: ``` @RequestMapping("/test") public String test() throws MyException { throw new MyException("test exception"); } ``` 4. 在异常解析器中处理异常: ``` @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ModelAndView modelAndView = new ModelAndView(); if (ex instanceof MyException) { modelAndView.addObject("message", ex.getMessage()); modelAndView.setViewName("error"); } else { modelAndView.addObject("message", "unknown error"); modelAndView.setViewName("error"); } return modelAndView; } ``` 在上面的示例中,如果Controller中抛出MyException异常,则异常解析器会返回错误信息"test exception",否则返回"unknown error"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值