统一异常处理

1.在jsp阶段,web.xml中,提供了error-page的写法,当发生指定异常的时候,指定跳转页面:

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>
    
<error-page>
    <exception-type>cn.sz.gl.util.MoneyLessException</exception-type>
        <location>/error.jsp</location>
</error-page> 


2.在spring中,也提供了一些异常处理的方式:

a. 通过@ExceptionHandler注解,来指定异常发生时需要完成的操作;
这种方式,只局限于注解所在的类中生效;
为了能在所有控制器类中应用,可以写一个父类,添加@ExceptionHandler注解,然后让所有控制器类继承该父类;
b. 借助于spring提供的SimpleMappingExceptionResolver异常处理类,完成异常配置
c. 也可以自己来创建自己的异常处理类,实现HandlerExceptionResolver接口

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        发生异常时,默认跳转的页面
        <property  name="defaultErrorView" value="error_simple" ></property>
        异常发生时,保存错误信息的对象的名字,默认叫做exception
        <property name="exceptionAttribute" value="ex" ></property>
    <property name="exceptionMappings" >
        <props>
            <prop key="cn.sz.gl.util.MoneyLessException" >error_simple</prop>
                
        </props>
    </property>
</bean> 
@Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagation.REQUIRED,rollbackFor= {AccountLessException.class,MoneyLessException.class})(事务)
    @Override
    public void inventoryReductionAndReduceBalance(Integer bookid,Integer accid) {
        
        //减库存数量
        storehousemapper.inventoryReduction(bookid);
        
        //查询库存
        Integer count = storehousemapper.findStorehouse(bookid);
        System.out.println("count:=================="+count);
        if(count<=0) {
            throw new AccountLessException("库存不足");
        }
        //减余额
        Account account = new Account();
        account.setAccid(accid);
        //这里需要查询现在的余额和书籍的价格
        //查询账户余额
        Double oldBalance = accountmapper.findBalance(accid);
        //查询书籍信息
        Book book = bookmapper.findByIdBook(bookid);
        //获取书籍的价格
        Double bookPrice = book.getBookPrice();
        //减去书籍价格后新的余额
        Double balance = oldBalance-bookPrice;
        if(balance<0) {
            throw new MoneyLessException("余额不足");
        }
        account.setBalance(balance);
        
        accountmapper.reduceBalance(account);
    }

 

posted @ 2020-07-28 20:38  IT搬砖者  阅读(116)  评论(0编辑  收藏  举报