最簡單springmvc全局異常處理

共兩種

  • 實(shí)現(xiàn)接口
  • 使用注解(簡單)

最近做項(xiàng)目在通過異潮拗矗控制返回值code碼,初步思路是定義一個(gè)全局異常處理器,上面剛說到有兩種方法,先講第一種.

HandlerExceptionResolver

springmvc給我們提供了可以擴(kuò)展的接口HandlerExceptionResolver,實(shí)現(xiàn)此接口,重寫處理異常方法.此方法有些不好用的是在返回值上面.強(qiáng)制我們返回model and view,如果想要返回json,則還需要自己轉(zhuǎn)換一層,下文寫到了.

/*
 * Copyright 2002-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.lang.Nullable;

/**
 * Interface to be implemented by objects that can resolve exceptions thrown during
 * handler mapping or execution, in the typical case to error views. Implementors are
 * typically registered as beans in the application context.
 *
 * <p>Error views are analogous to JSP error pages but can be used with any kind of
 * exception including any checked exception, with potentially fine-grained mappings for
 * specific handlers.
 *
 * @author Juergen Hoeller
 * @since 22.11.2003
 */
public interface HandlerExceptionResolver {

    /**
     * Try to resolve the given exception that got thrown during handler execution,
     * returning a {@link ModelAndView} that represents a specific error page if appropriate.
     * <p>The returned {@code ModelAndView} may be {@linkplain ModelAndView#isEmpty() empty}
     * to indicate that the exception has been resolved successfully but that no view
     * should be rendered, for instance by setting a status code.
     * @param request current HTTP request
     * @param response current HTTP response
     * @param handler the executed handler, or {@code null} if none chosen at the
     * time of the exception (for example, if multipart resolution failed)
     * @param ex the exception that got thrown during handler execution
     * @return a corresponding {@code ModelAndView} to forward to,
     * or {@code null} for default processing in the resolution chain
     */
    @Nullable
    ModelAndView resolveException(
            HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex);

}

如果model and view要轉(zhuǎn)換成普通json返回,則需要手動(dòng)轉(zhuǎn)換一層:

MappingJackson2JsonView jackson2JsonView = new MappingJackson2JsonView();
    //設(shè)置返回的json  map
    Map returnData = Maps.newHashMap();
    //TODO add return data
    jackson2JsonView.setAttributesMap(returnData);
    ModelAndView view = new ModelAndView();
    view.setView(jackson2JsonView);
    return view;
簡單方法(使用注解)

在開始說這個(gè)之前,我們要先了解一下相關(guān)的兩個(gè)注解

  • @ControllerAdvice,注釋大致意思就是 controllerAdvice是一個(gè)用于定義@ExceptionHadnler的Component注解.適用于所有的@RequestMapping方法
  • @ExceptionHandler:需要處理的異常,如果不傳值默認(rèn)處理所有異常

使用方法:

import com.immomo.moaservice.live.assess.impl.exception.ActivityAnalyticsException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author: hman
 * @date 2018-11-05
 * @desc: 全局異常處理
 */
@RestControllerAdvice
public class ActivityExceptionHandler {

  @ExceptionHandler(ActivityAnalyticsException.class)
  @ResponseBody
  public ResultUtil resolveException(ActivityAnalyticsException e) {
    return ResultUtil.build(e.getCodeEnum());
  }


}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堰乔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗅绰,更是在濱河造成了極大的恐慌,老刑警劉巖搀继,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窘面,死亡現(xiàn)場離奇詭異,居然都是意外死亡叽躯,警方通過查閱死者的電腦和手機(jī)财边,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來点骑,“玉大人酣难,你說我怎么就攤上這事『诘危” “怎么了憨募?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袁辈。 經(jīng)常有香客問我菜谣,道長,這世上最難降的妖魔是什么吵瞻? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任葛菇,我火速辦了婚禮,結(jié)果婚禮上橡羞,老公的妹妹穿的比我還像新娘眯停。我一直安慰自己,他們只是感情好卿泽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布莺债。 她就那樣靜靜地躺著滋觉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齐邦。 梳的紋絲不亂的頭發(fā)上椎侠,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音措拇,去河邊找鬼我纪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛丐吓,可吹牛的內(nèi)容都是我干的浅悉。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼券犁,長吁一口氣:“原來是場噩夢啊……” “哼术健!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粘衬,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤荞估,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后稚新,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勘伺,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年褂删,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娇昙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笤妙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出噪裕,到底是詐尸還是另有隱情蹲盘,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布膳音,位于F島的核電站召衔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祭陷。R本人自食惡果不足惜苍凛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兵志。 院中可真熱鬧醇蝴,春花似錦、人聲如沸想罕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惭适,卻和暖如春笙瑟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背癞志。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工往枷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凄杯。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓错洁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盾舌。 傳聞我的和親對象是個(gè)殘疾皇子墓臭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容