浣滆€咃細xbhog\閾炬帴锛歸ww.cnblogs.com/xbhog/p/15207278.html寮傚父澶勭悊锛氳儗鏅細鏈€杩戝湪鎼缓鑷繁鐨勪釜浜哄崥瀹紙鐮佸啘灏忕櫧鐨勭棿杩凤級锛岃嚜宸辨惌寤哄悗鍙扮殑鏃跺€欓鍏堣鑰冭檻鐨勬槸寮傚父澶勭悊銆傛垜涓汉涔熸槸杈瑰涔犺竟鍋氾紝闅惧厤鏈夌枏婕忎箣澶勩€備笉瀵圭殑鍦版柟甯屾湜鏈嬪弸浠澶氭彁閱掋€傛妧鏈爤锛歴pringBoot2.5.3Mybatis-plusthymeleafmysql鏈崥瀹㈢畝鍗曡褰曚竴涓嬭嚜宸辩殑瀛︿範杩囩▼銆傚鏋滃悗闈㈠仛涓€涓畝鍗曠殑demo锛屼細鎶婄粏鑺傛暣鐞嗗嚭鏉ュ彂甯冦€傛帹鑽愪竴涓猄pringBoot鍩虹鏁欑▼鍜屽疄渚嬶細https://github.com/javastacks...寮傚父澶勭悊涓汉绮楃暐鐨勫涔犲拰鐞嗚В锛屾垜鎶婂紓甯搁敊璇垎涓轰笁绉嶏紝4xx锛?xx锛宔rror(custom)甯哥敤鐨勬槸404鑰?00鍝嶅簲鏄?04(notfound)鏈嶅姟鍣ㄦ壘涓嶅埌璇锋眰鐨勭綉椤垫湇鍔″櫒鍙戠敓鍐呴儴閿欒鏈嶅姟鍣ㄩ亣鍒伴敊璇棤娉曞畬鎴愯姹傚湪templates鏂囦欢涓嬪垱寤?04.html銆?00.html鍜宔rror.html濡傛灉浣犲垱寤轰簡4xx.html鍜?xx.html锛岄偅涔堝綋鎵句笉鍒伴〉闈㈡垨鑰呯▼搴忓唴閮ㄥ嚭閿欑殑鏃跺€欙紝SpringBoot浼氳嚜鍔ㄥ尮閰嶈繖涓や釜椤甸潰銆傚叿浣撶殑婧愮爜杩欓噷灏变笉鍒嗘瀽浜嗭紝鏈夊叴瓒g殑鍙互瀛︿範涓€涓嬨€傚綋鎴戞兂灏嗛敊璇俊鎭繑鍥炲埌鎴戠殑鑷畾涔夐〉闈㈡椂锛屾垜璇ュ浣曞啓锛熸垜浠粠涓婂埌涓嬫€濊€冿細褰撴垜浠闂〉闈㈢殑鏃跺€欙紝鏃犺鏄〉闈㈡湁閿欒杩樻槸鎵句笉鍒帮紝鎴戜滑鏄笉鏄兘瑕佸幓瀹冭姹傜殑Url锛岄偅鎴戜滑鎬庝箞澶勭悊杩欎釜璇锋眰鍛紵杩欐椂鍊欐垜浠嚜鐒惰€岀劧鐨勬兂鍒颁簡鎷︽埅鍣紝浜庢槸鎴戜滑缂栧啓浜咰ontrollerExceptionHandler绫绘潵涓撻棬鎷︽埅鎵€鏈夌殑寮傚父璇锋眰銆傛垜浠鐞嗗紓甯稿悗锛岄『鍏惰嚜鐒讹紝鎴栬€呰繑鍥炲埌鎴戜滑闇€瑕佺殑鑷畾涔夐〉闈€傝繖灏辨弧瓒充簡鎴戜滑涓婇潰鐨勮姹傘€傞渶瑕佺殑鎶€鏈偣锛欯ControllerAdvice涓嶡ExceptionHandler娉ㄨВ缁撳悎浣跨敤銆傚綋controller灞傛姏鍑哄紓甯告椂锛屽彲浠ョ粺涓€澶勭悊寮傚父锛屾寚瀹氳繑鍥炵殑json鏍煎紡鎴栬€呰烦杞埌鎸囧畾鐨勯敊璇〉闈㈢瓑銆侤ExceptionHandler(Exception.class)//琛ㄧず鎹曡幏鎵€鏈夊紓甯搞€侻odelAndView鍏跺疄鏈変袱涓綔鐢紝涓€涓槸鎸囧畾杩斿洖椤甸潰锛屽彟涓€涓槸鍦ㄨ繑鍥為〉闈㈡墦鍗扮殑鍚屾椂娣诲姞灞炴€э紝閫氳繃Logger鑾峰彇鐩稿叧鐨勫紓甯镐俊鎭細//Getexceptioninformationlogger.error(()->{returnString.format("璇锋眰URL:%s,Exception:%s",request.getRequestURL(),e);},e);鍦ㄨ繖閲屾垜璧颁簡涓€浜涘集璺紝灏忎紮瀛愯嚜宸辫蛋绐勪簡锛屽娓稿寘閿欎簡馃槀銆傛垜杩欓噷瀵煎叆鐨勫寘鍦╩ybatis涓細importorg.mybatis.logging.Logger锛涘鍏rg.mybatis.logging.LoggerFactory锛涘弬鏁颁紶閿欎簡锛屽彧鑳介『鐫€婧愮爜鐨勮矾寰勶紝鐪嬬湅鎴戝彨浠€涔堬細finally鏄寜鐓т笂闈㈢殑浠g爜鏍煎紡鍐欑殑銆傜湅浜嗗埆浜哄啓鐨勪唬鐮佹墠鏄庣櫧锛屽涓嬶細importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;logger.error("RequstURL:{},Exception:{}",request.getRequestURL(),e);鍙兘鏈夌殑鏈嬪弸瑙夊緱娌′粈涔堬紝鎴戣皟浜嗗崐涓皬鏃舵墠鍑烘潵銆傞鐗╂槸鍘熺姜銆侺ogger鍙槸鍦ㄦ帶鍒跺彴杈撳嚭锛屾垨鑰呯粦瀹氬埌鏃ュ織锛屾墠浼氳緭鍑哄埌鏃ュ織銆傞偅涔堜笂闈㈢殑闂閮芥槸閫氳繃ModelAndView杩欎釜绫绘潵瀹炵幇鐨勶細ModelAndView灏卞儚涓€涓狹odel銆侻odelAndViewmodelAndView=newModelAndView();//瀹炰緥鍖栦竴涓狹odelAndViewmodelAndView.addObject("url",request.getRequestURL());//灏嗚幏鍙栧埌鐨剈rl娣诲姞鍒版ā鍨嬩腑modelAndView.addObject("exception",e);//鑾峰彇寮傚父淇℃伅//杩斿洖閿欒椤甸潰modelAndView.setViewName("error/error");杩斿洖妯″瀷鍜岃鍥撅紱鏁查粦鏉匡細鏂拌姹傛潵浜嗭紒濡傛灉鎴戞兂鎶?04寮傚父浠庢墍鏈夊紓甯镐腑鍓ョ鍑烘潵锛岃繑鍥炵粰SpringBoot璁╀粬鑷姩澶勭悊椤甸潰鎬庝箞瑙e喅銆傛牴鎹涔犮€傚綋椤甸潰涓簄ull鏃讹紝鍚戜笂鎶涘嚭涓€涓嚜瀹氫箟鐨勫紓甯哥被锛屾爣蹇楀紓甯哥姸鎬併€倀hrownewNotFoundException("鎵句笉鍒板崥瀹紝璇疯仈绯荤鐞嗗憳");//鑷畾涔夌被@ResponseStatus(HttpStatus.NOT_FOUND)publicclassNotFoundExceptionextendsRuntimeException{publicNotFoundException(){super();}publicNotFoundException(Stringmessage){super(message);鐒跺悗鎴戜滑鍙互鍦ㄩ€氱敤寮傚父涓娇鐢ˋnnotationUtils.findAnnotation锛岄€氳繃浼犲叆AnnotatedElement鍜屾敞瑙g被鍨嬫潵鏌ユ壘鏂规硶鎴栫被瀵硅薄涓婄殑娉ㄨВ銆傚鏋滄潯浠舵弧瓒筹紝鍙互鎶涘嚭寮傚父璁㏒pringBoot鎺ョ銆俰f(AnnotationUtils.findAnnotation(e.getClass(),ResponseStatus.class)!=null){throwe;}End:濡傛灉浣犵湅鍒拌繖涓垨鑰呮伆濂藉浣犳湁甯姪锛屽笇鏈涗綘鑳藉叧娉ㄦ垨鑰呮帹鑽愪竴涓嬶紝璋㈣阿浣狅紒杩戞湡鐑偣鏂囩珷鎺ㄨ崘锛?.1000+Java闈㈣瘯棰樺強绛旀锛?022鏈€鏂扮増锛?.鍘夊浜嗭紒Java鍗忕▼鏉ヤ簡銆?.3.SpringBoot2.x鏁欑▼锛屽お鍏ㄩ潰浜嗭紒4.涓嶈鐢ㄧ垎鐮寸垎婊$敾闈紝璇曡瘯瑁呴グ鑰呮ā寮忥紝杩欐墠鏄紭闆呯殑鏂瑰紡锛侊紒5.銆奐ava寮€鍙戞墜鍐岋紙宓╁北鐗堬級銆嬫渶鏂板彂甯冿紝璧跺揩涓嬭浇鍚э紒鎰熻涓嶉敊锛屽埆蹇樹簡鐐硅禐+杞彂锛?/p>
