Spring 统一异常处理

1.返回给页面的json工具类java

public class JsonResultUtil {  
    	@SuppressWarnings({ "rawtypes", "unchecked" })
    	private static Map<String,Object> json = new HashMap(0);
    	
    	public static Map<String,Object> success(){
    		return success(0,"操做成功");
    	}
    	
    	public static Map<String,Object> success(Integer code,String message){
    		json.put("code", code);
    		json.put("msg", message);
    		return json; 
    	}
    	
    	public static Map<String,Object> error(Integer code,String message){
    		json.put("code", code);
    		json.put("msg", message);
    		return json; 
    	} 	
    }

2. 流程状态枚举类json

public enum ResultEnum {
    	
    	NORMAL(0,"正常"),
    	
    	FLOW_END_ERROR(804,"【操做失败】流程已结束, 请联系系统管理员"),
    	;
    	
    	ResultEnum(Integer code,String message){
    		this.code = code;
    		this.message = message;
    	}
    	
    	private Integer code;
    	private String message;
    	
    	public Integer getCode() {
    		return code;
    	}
    
    	public String getMessage() {
    		return message;
    	}   	
    }

3.编写统一异常处理类(Spring只有抛出RuntimeException这个异常类才会执行事务的回滚)ide

public class MyException extends RuntimeException{
    
    private Integer code;
    
    public MyException(ResultEnum resultEnum){
    super(resultEnum.getMessage());
    this.code = resultEnum.getCode();
    }
    
    public MyException(Integer code,String message){
    super(message);
    this.code = code;
    }
    
    	public Integer getCode() {
    		return code;
    	}
    
    	public void setCode(Integer code) {
    		this.code = code;
    	}  
    }

4. 在Service层编写业务(抛出异常后不执行后面的代码)工具

@Service
    public class UserServiceImpl implements UserService{
    
    	@Autowired
    	private UserDao userDao;
    
    	@Override
    	@Transactional
    	public void ex(){
    		User user = new User();
    		user.setName("_Artisan");
    		userDao.save(user);
    		if(2>1){
    			throw new MyException(ResultEnum.FLOW_END_ERROR);
    		}
    		System.out.println("###### haha #######");
    	}  
    }

5. 在Controller捕获异常(抛出异常后面的代码仍然执行),返回给错误信息给页面。页面接收到信息可作对应的弹窗提示测试

@Controller
    public class UserJson implements ModelDriven<User>{
    
    	private User user;
    	@Autowired
    	private UserService userService;
    	private Map<String,Object> json = JsonResultUtil.success();
    
    	private void printJson(Object o) {
    		getPrintWriter().write(JSONObject.toJSONString(o));
    	}
    
    	// 测试
    	public void test(){
    		try{
    			userService.ex();
    		}catch(MyException e){
    			json = JsonResultUtil.error(e.getCode(), e.getMessage());
    		}
    		printJson(json);
    	}
    
    	public PrintWriter getPrintWriter() {
    	if(null == printWriter){
    		try {
    			printWriter = getResponse().getWriter();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    		return printWriter;
    	}
    
    	@Override
    	public User getModel() {
    		if (s == null) {
    			s = new User();
    		}
    		return s;
    	}
    
    	// 省略User get、set的方法
    
    }
相关文章
相关标签/搜索