首页 > 学院 > 开发设计 > 正文

SpringMVC处理异常

2019-11-11 01:59:01
字体:
来源:转载
供稿:网友

SPRingMVC处理异常

@(SpringMVC)[springmvc, 异常]

SpringMVC处理异常SpringMVC单异常处理SpitterController2SpittleNotFoundExceptionMyErrorspringMvc架构级别异常处理案例自定义异常类自定义全局异常处理器错误页面errorjsp在SpringMVC配置文件中配置创建异常测试

SpringMVC单异常处理

SpitterController2

package spittr.web;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.web.bind.annotation.*;import spittr.Spittle;import spittr.data.SpitterRepository;// 使用RestController,相当于在每个方法上加上了@ResponseBody@RestController@RequestMapping("/spitter2")public class SpitterController2 { private SpitterRepository spitterRepository; @Autowired public SpitterController2(SpitterRepository spitterRepository) { this.spitterRepository = spitterRepository; } @RequestMapping(value = "/{id}", method = RequestMethod.GET) public Spittle spittleById(@PathVariable long id) { Spittle spittle = spitterRepository.findOne(id); if (spittle == null) { throw new SpittleNotFoundException(id); } return spittle; } @ExceptionHandler(SpittleNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public MyError spittleNotFound(SpittleNotFoundException e) { long spittleId = e.getSpittleId(); return new MyError(4, "Spittle[" + spittleId + "] not found"); }}

SpittleNotFoundException

package spittr.web;/** * Created by Switch on 2017/1/14. */public class SpittleNotFoundException extends RuntimeException { private long spittleId; public SpittleNotFoundException(long spittleId) { this.spittleId = spittleId; } public long getSpittleId() { return spittleId; }}

MyError

package spittr.web;/** * Created by Switch on 2017/1/14. */public class MyError { private int code; private String message; public MyError(int code, String message) { this.code = code; this.message = message; } public int getCode() { return code; } public String getMessage() { return message; }}

springMvc架构级别异常处理

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。 系统的dao、service、controller 出现都通过throws Exception 向上抛出,最后由springmvc 前端控制器交由异常处理器进行异常处理,如下图: SpringMVC异常处理

案例

自定义异常类

package com.pc.ssm.exception;/** * 自定义异常 * * @author Switch * @data 2017年1月13日 * @version V1.0 */public class CustomException extends Exception { private static final long serialVersionUID = -665787561868437767L; // 异常消息 private String message; public CustomException() { } public CustomException(String message) { this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}

自定义全局异常处理器

package com.pc.ssm.exception;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;/** * 自定义全局异常处理器 * * @author Switch * @data 2017年1月13日 * @version V1.0 */public class CustomGlobalExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ex.printStackTrace(); String msg = ""; if (ex instanceof CustomException) { msg = ((CustomException) ex).getMessage(); } else { msg = "系统繁忙,请稍后再试,或与管理员取得联系!"; } ModelAndView modelAndView = new ModelAndView(); // 添加错误信息 modelAndView.addObject("error", msg); modelAndView.setViewName("error"); return modelAndView; }}

错误页面error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>系统通知</title> </head> <body> <h2>${error}</h2> </body></html>

在SpringMVC配置文件中配置

<!-- 配置异常处理器 --> <bean id="handlerExceptionResolver" class="com.pc.ssm.exception.CustomGlobalExceptionResolver"/>

创建异常

@RequestMapping("/showEdit") public String showEdit(@RequestParam(value = "id") String id, Model model) throws Exception { User user = userService.findById(Integer.parseInt(id)); // 创造个异常 if(user == null) { throw new CustomException("用户不存在!"); } else if(user.getId() == 1) { int i = 1 / 0; } model.addAttribute("user", user); return "edit"; }

测试

访问:http://localhost:8080/SpringMVCAdvanced/user/showEdit.action?id=1,出现“系统繁忙,请稍后再试,或与管理员取得联系!”。 访问:http://localhost:8080/SpringMVCAdvanced/user/showEdit.action?id=2,正常访问。 访问:http://localhost:8080/SpringMVCAdvanced/user/showEdit.action?id=1000023,出现“用户不存在!”。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表