springMVC之异常处理

使用springMVC提供的SimpleMappingExceptionResolver

    <!-- 异常配置 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    	<span style="white-space:pre">	</span><!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception,页面使用${ex}获取 -->  
   	 	<property name="exceptionAttribute" value="ex"></property>  
   	 	<!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页名作为值,注意不要写成/exception/numberException -->  
		<property name="exceptionMappings">
			<props>
				<prop key="NumberFormatException">exception/numberException</prop>
				<prop key="NullPointerException">exception/nullException</prop>
			</props>
		</property>
		<!-- 定义默认的异常处理页面-->
		<property name="defaultErrorView" value="exception/exception"/><!-- 表示当抛出异常但没有在exceptionMappings里面找到对应的异常时 返回名叫exception的视图-->
		<property name="statusCodes"><!-- 定义在发生异常时视图跟返回码的对应关系 -->
			<props>
				<prop key="exception/numberException">500</prop><!-- 表示在发生NumberFormatException时返回视图number,然后这里定义发生异常时视图number对应的HttpServletResponse的返回码是500 -->
				<prop key="exception/nullException">503</prop>
			</props>
		</property>
		<property name="defaultStatusCode" value="404"/><!-- 表示在发生异常时默认的HttpServletResponse的返回码是多少,默认是200 -->
	</bean>

使用@ExceptionHandler进行处理

使用@ExceptionHandler进行处理有一个不好的地方是进行异常处理的方法必须与出错的方法在同一个Controller里面

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;

import com.tiantian.blog.web.servlet.MyException;

@Controller
public class GlobalController {
	/**
	 * 用于处理异常的
	 * @return
	 */
	@ExceptionHandler({MyException.class})
	public String exception(MyException e) {
		System.out.println(e.getMessage());
		e.printStackTrace();
		return "exception";
	}
	
	@RequestMapping("test")
	public void test() {
		throw new MyException("出错了!");
	}
}

使用@ControllerAdvice来实现异常处理

@ControllerAdvice作用就是应用到所有@RequestMapping注解,解决了上述问题

package com.huihui.chy.demo1.exception;

import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.servlet.ModelAndView;


@ControllerAdvice
public class DefaultExceptionHandler {
    /**
     * 没有权限 异常
     * <p/>
     * 后续根据不同的需求定制即可
     */
    @ExceptionHandler({MyException.class})
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public ModelAndView processUnauthenticatedException(NativeWebRequest request, MyException e) {
    	System.out.println("===========应用到所有@RequestMapping注解的方法,在其抛出MyException异常时执行:"+e.getMessage());
        ModelAndView mv = new ModelAndView();
        mv.addObject("ex", e.getMessage());
        mv.setViewName("exception/exception");
        return mv;
    }
}
配置文件启用该注解

<context:component-scan base-package="com.huihui.chy.demo1.exception" use-default-filters="false">
     <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值