亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

SpringMVC 異常處理

2019-11-15 00:38:06
字體:
來源:轉載
供稿:網友
SPRingMVC 異常處理Using HTTP Status Codes

在我們自定義的異常上使用ResponseStatus注解。當我們的Controller拋出異常,并且沒有被處理的時候,他將返回HTTP STATUS 為指定值的 HTTP RESPONSE,比如:

    @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order")  // 404    public class OrderNotFoundException extends RuntimeException {        // ...    }

我們的Controller為:

 @RequestMapping(value="/orders/{id}", method=GET)    public String shoWorder(@PathVariable("id") long id, Model model) {        Order order = orderRepository.findOrderById(id);        if (order == null) throw new OrderNotFoundException(id);        model.addAttribute(order);        return "orderDetail";    }

這時候會返回404,轉到404頁面而不是錯誤頁面

Controller Based Exception Handling

在一個Controller中,,注意這種只在單個Controller中有效。這么做可以:

  1. 發生異常后,改變Response status,一般而言,發生異常返回HTTP STATUS 500.我們可以變為其他。
  2. 發生錯誤后轉到錯誤頁面
  3. 可以為不同異常定義不同處理(如不同的錯誤頁面,不同的Response status)

舉例說明

@Controllerpublic class ExceptionHandlingController {  // 我們標注了@RequestMapping的方法  ...    //處理異常的方法。    // 把我們定義的異常轉換為特定的Http status code  @ResponseStatus(value=HttpStatus.CONFLICT, reason="Data integrity violation")  // 409  @ExceptionHandler(DataIntegrityViolationException.class)  public void conflict() {    // Nothing to do  }    // 捕獲到SQLException,DataaccessException異常之后,轉到特定的頁面。  @ExceptionHandler({SQLException.class,DataAccessException.class})  public String databaseError() {    //僅僅轉到錯誤頁面,我們在頁面上得不到這個Exception的值,要得到值,我們可以通過下面的方法得到    return "databaseError";  }  // 通過ModelAndView返回頁面,以及往頁面傳相應的值  @ExceptionHandler(Exception.class)  public ModelAndView handleError(HttpServletRequest req, Exception exception) {    logger.error("Request: " + req.getRequestURL() + " raised " + exception);    ModelAndView mav = new ModelAndView();    mav.addObject("exception", exception);    mav.addObject("url", req.getRequestURL());    mav.setViewName("error");    return mav;  }}
Global Exception Handling

在類上使用 @ControllerAdvice注解,可以使得我們處理整個程序中拋出的異常。。舉例:

class GlobalControllerExceptionHandler {    @ResponseStatus(HttpStatus.CONFLICT)  // 409    @ExceptionHandler(DataIntegrityViolationException.class)    public void handleConflict() {        // Nothing to do    }       //轉到特定頁面 。。。。。}

如果我們要處理程序中所有的異??梢赃@么做:

@ControllerAdviceclass GlobalDefaultExceptionHandler {    public static final String DEFAULT_ERROR_VIEW = "error";    @ExceptionHandler(value = Exception.class)    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {        // If the exception is annotated with @ResponseStatus rethrow it and let        // the framework handle it - like the OrderNotFoundException example        // at the start of this post.        // AnnotationUtils is a Spring Framework utility class.        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {            throw e;        }        // Otherwise setup and send the user to a default error-view.        ModelAndView mav = new ModelAndView();        mav.addObject("exception", e);        mav.addObject("url", req.getRequestURL());        mav.setViewName(DEFAULT_ERROR_VIEW);        return mav;    }}
Going Deeper

實現HandlerExceptionResolver接口,SpringMvc可以使用他來處理Controller中拋出的異常

public interface HandlerExceptionResolver {    ModelAndView resolveException(HttpServletRequest request,             HttpServletResponse response, Object handler, Exception ex);}

SpringMvc使用三種默認的HandlerExceptionResolver來處理我們的異常

  1. ExceptionHandlerExceptionResolver:。
  2. ResponseStatusExceptionResolver:
  3. DefaultHandlerExceptionResolver:把Spring定義的一些標準異常,轉換為HTTP STATUS CODE.

Spring內置的SimpleMappingExceptionResolver實現了HandlerExceptionResolver接口,也是我們經常使用的,xml配置如下:

<bean id="simpleMappingExceptionResolver"          class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">        <property name="exceptionMappings">            <map>                <!-- key為異常類型,value為要轉到的頁面 -->                <entry key="DatabaseException" value="databaseError"/>                <entry key="InvalidCreditCardException" value="creditCardError"/>            </map>        </property>        <!-- 默認的異常頁面 -->        <property name="defaultErrorView" value="error"/>        <!-- 在頁面我們可以通過ex拿到異常信息 -->        <property name="exceptionAttribute" value="ex"/>                <!-- Name of logger to use to log exceptions. Unset by default, so logging disabled -->         <!-- log異常信息,默認不設置-不記錄異常信息 -->        <property name="warnLogCategory" value="example.MvcLogger"/>    </bean>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲伦理中文字幕| 亚洲男人天堂2019| 午夜美女久久久久爽久久| 91免费人成网站在线观看18| 久久久久久久久久久久久久久久久久av| 日韩精品一区二区三区第95| 国产精品美女999| 国产精品久久综合av爱欲tv| 91国产美女视频| 九九热r在线视频精品| 成人黄色免费看| 亚洲一区二区三区四区视频| 亚洲自拍av在线| 久久这里只有精品视频首页| 日韩经典中文字幕在线观看| 91免费综合在线| 亚洲国产成人精品女人久久久| 国产精品久久久久久久美男| 日韩在线观看av| 国内精品一区二区三区| 九九热精品视频在线播放| 久久中文字幕一区| 亚洲黄页网在线观看| 91精品国产高清久久久久久91| 国产成人精品在线视频| 成人黄色在线免费| 热99久久精品| 亚洲国产精品成人一区二区| 欧美精品在线视频观看| 日韩免费在线看| 亚洲女同精品视频| 亚洲欧美国产一本综合首页| 久久久久久久影视| 亚洲免费一在线| 亚洲国产成人精品久久久国产成人一区| 国产精品高清免费在线观看| 国产精品视频区| 久久久电影免费观看完整版| 国产成人在线亚洲欧美| 日韩欧美极品在线观看| 国产亚洲精品美女久久久| 国产精品久久久久久久天堂| 成人免费大片黄在线播放| 69久久夜色精品国产69| 欧美性xxxx在线播放| 亚洲va欧美va国产综合剧情| 亚洲欧美一区二区三区四区| 国产成人精品久久二区二区91| 久久综合国产精品台湾中文娱乐网| 久久精品一本久久99精品| 欧美大片免费看| xxxxxxxxx欧美| 午夜精品久久久久久久久久久久久| 中文字幕久久亚洲| 国产极品精品在线观看| 91亚洲精品视频| 色999日韩欧美国产| 亚洲色图25p| 亚洲国产欧美一区二区三区久久| 日韩成人在线电影网| 国产精品免费视频xxxx| 国产日韩换脸av一区在线观看| 亚洲国产精品国自产拍av秋霞| 亚洲人成网7777777国产| 色综合天天综合网国产成人网| 日韩在线观看网站| 欧美电影在线观看完整版| 国产一区二区三区视频免费| 粉嫩av一区二区三区免费野| xvideos成人免费中文版| 欧美尤物巨大精品爽| 亚洲大胆人体av| 亚洲一区久久久| 伊人伊成久久人综合网站| 欧美日韩一区二区三区在线免费观看| 草民午夜欧美限制a级福利片| 久久福利视频导航| 91精品视频在线| 91黑丝高跟在线| 欧美日韩国产在线播放| 精品美女永久免费视频| 国产精自产拍久久久久久| 91精品一区二区| 国产欧美精品va在线观看| 欧美日韩xxx| 欧美有码在线观看| 久久91亚洲人成电影网站| 欧美精品午夜视频| 国产精品青草久久久久福利99| 精品视频久久久久久久| 国产成人在线视频| 欧美亚洲国产日本| 久久综合色88| 欧美日韩免费观看中文| 欧美区二区三区| 日韩有码在线电影| 久久久久久一区二区三区| 亚洲图片在区色| 精品中文字幕视频| 亚洲风情亚aⅴ在线发布| 久久人体大胆视频| 国产狼人综合免费视频| 亚洲精品短视频| 狠狠爱在线视频一区| 狠狠操狠狠色综合网| 韩国v欧美v日本v亚洲| 久久影视三级福利片| 91久久久久久久久久久| 欧美日本高清一区| 97国产精品久久| 欧美一区二区三区免费观看| 久久久这里只有精品视频| 中文字幕一区二区三区电影| 亚洲第一中文字幕在线观看| 4438全国成人免费| 亚洲精品动漫100p| 日韩av资源在线播放| 98午夜经典影视| 成人信息集中地欧美| 亚洲国产小视频| 都市激情亚洲色图| 97热精品视频官网| 91精品国产综合久久久久久久久| 欧美激情视频免费观看| 国产精品无码专区在线观看| 国产视频精品一区二区三区| 最新69国产成人精品视频免费| 亚洲色图18p| 91啪国产在线| 国产精自产拍久久久久久蜜| 亚洲欧洲午夜一线一品| 久久久久久久久国产精品| 欧美另类在线观看| 91在线色戒在线| 亚洲激情在线观看视频免费| 成人欧美一区二区三区在线湿哒哒| 亚洲天堂成人在线视频| 国产亚洲视频中文字幕视频| 午夜精品一区二区三区视频免费看| 久久久这里只有精品视频| 亚洲精品欧美日韩专区| 欧美日韩成人免费| 欧美wwwxxxx| 亚洲深夜福利网站| 精品国产91久久久久久老师| 亚洲三级 欧美三级| 国产精品电影网站| 黑人巨大精品欧美一区二区三区| 亚洲国产精品一区二区三区| 亚洲成人激情在线观看| 国产经典一区二区| 久久久精品999| 国产成人精品视频在线| 国产专区精品视频| 国产一区二区成人| 日韩欧美精品在线观看| 免费99精品国产自在在线| 欧美性猛交xxxxx水多| 麻豆一区二区在线观看| 日韩欧美一区视频| 国产亚洲福利一区| xxxxxxxxx欧美| 另类天堂视频在线观看| 亚洲第一视频在线观看|