{"id":6576,"date":"2022-07-21T11:15:41","date_gmt":"2022-07-21T03:15:41","guid":{"rendered":"http:\/\/123.57.164.21\/?p=6576"},"modified":"2022-07-21T11:15:41","modified_gmt":"2022-07-21T03:15:41","slug":"springboot-restcontrolleradvice%e4%bd%9c%e7%94%a8%e5%8f%8a%e5%8e%9f%e7%90%86","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=6576","title":{"rendered":"SpringBoot @RestControllerAdvice\u4f5c\u7528\u53ca\u539f\u7406"},"content":{"rendered":"\n<p>\u539f\u6587\uff1a<a href=\"https:\/\/www.cnblogs.com\/magicalSam\/p\/7198420.html\">Spring Boot \u7cfb\u5217\uff08\u516b\uff09@ControllerAdvice \u62e6\u622a\u5f02\u5e38\u5e76\u7edf\u4e00\u5904\u7406<\/a><\/p>\n\n\n\n<p>\u5728spring 3.2\u4e2d\uff0c\u65b0\u589e\u4e86@ControllerAdvice \u6ce8\u89e3\uff0c\u53ef\u4ee5\u7528\u4e8e\u5b9a\u4e49@ExceptionHandler\u3001@InitBinder\u3001@ModelAttribute\uff0c\u5e76\u5e94\u7528\u5230\u6240\u6709@RequestMapping\u4e2d\u3002\u53c2\u8003\uff1a<a href=\"http:\/\/docs.spring.io\/spring-framework\/docs\/5.0.0.M1\/javadoc-api\/org\/springframework\/web\/bind\/annotation\/ControllerAdvice.html\">@ControllerAdvice \u6587\u6863<\/a><\/p>\n\n\n\n<p><strong>\u4e00\u3001\u4ecb\u7ecd<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>\u521b\u5efa MyControllerAdvice\uff0c\u5e76\u6dfb\u52a0 @ControllerAdvice\u6ce8\u89e3\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package com.sam.demo.controller;\n\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.WebDataBinder;\nimport org.springframework.web.bind.annotation.*;\nimport java.util.HashMap;\nimport java.util.Map;\n\n\/**\n * controller \u589e\u5f3a\u5668\n * @author sam\n * @since 2017\/7\/17\n *\/\n@ControllerAdvice\npublic class MyControllerAdvice {\n\n    \/**\n     * \u5e94\u7528\u5230\u6240\u6709@RequestMapping\u6ce8\u89e3\u65b9\u6cd5\uff0c\u5728\u5176\u6267\u884c\u4e4b\u524d\u521d\u59cb\u5316\u6570\u636e\u7ed1\u5b9a\u5668\n     * @param binder\n     *\/\n    @InitBinder\n    public void initBinder(WebDataBinder binder) {}\n\n    \/**\n     * \u628a\u503c\u7ed1\u5b9a\u5230Model\u4e2d\uff0c\u4f7f\u5168\u5c40@RequestMapping\u53ef\u4ee5\u83b7\u53d6\u5230\u8be5\u503c\n     * @param model\n     *\/\n    @ModelAttribute\n    public void addAttributes(Model model) {\n        model.addAttribute(\"author\", \"Magical Sam\");\n    }\n\n    \/**\n     * \u5168\u5c40\u5f02\u5e38\u6355\u6349\u5904\u7406\n     * @param ex\n     * @return\n     *\/\n    @ResponseBody\n    @ExceptionHandler(value = Exception.class)\n    public Map errorHandler(Exception ex) {\n        Map map = new HashMap();\n        map.put(\"code\", 100);\n        map.put(\"msg\", ex.getMessage());\n        return map;\n    }\n\n}\n<\/pre>\n\n\n\n<p>\u542f\u52a8\u5e94\u7528\u540e\uff0c\u88ab @ExceptionHandler\u3001@InitBinder\u3001@ModelAttribute \u6ce8\u89e3\u7684\u65b9\u6cd5\uff0c\u90fd\u4f1a\u4f5c\u7528\u5728 \u88ab @RequestMapping \u6ce8\u89e3\u7684\u65b9\u6cd5\u4e0a\u3002<\/p>\n\n\n\n<p>@ModelAttribute\uff1a\u5728<a rel=\"noreferrer noopener\" href=\"https:\/\/so.csdn.net\/so\/search?q=Model&amp;spm=1001.2101.3001.7020\" target=\"_blank\">Model<\/a>\u4e0a\u8bbe\u7f6e\u7684\u503c\uff0c\u5bf9\u4e8e\u6240\u6709\u88ab @RequestMapping \u6ce8\u89e3\u7684\u65b9\u6cd5\u4e2d\uff0c\u90fd\u53ef\u4ee5\u901a\u8fc7 ModelMap \u83b7\u53d6\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@RequestMapping(\"\/home\")\npublic String home(ModelMap modelMap) {\n    System.out.println(modelMap.get(\"author\"));\n}\n \n\/\/\u6216\u8005 \u901a\u8fc7@ModelAttribute\u83b7\u53d6\n \n@RequestMapping(\"\/home\")\npublic String home(@ModelAttribute(\"author\") String author) {\n    System.out.println(author);\n}<\/pre>\n\n\n\n<p>@ExceptionHandler \u62e6\u622a\u4e86\u5f02\u5e38\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8be5\u6ce8\u89e3\u5b9e\u73b0\u81ea\u5b9a\u4e49\u5f02\u5e38\u5904\u7406\u3002\u5176\u4e2d\uff0c@ExceptionHandler \u914d\u7f6e\u7684 value \u6307\u5b9a\u9700\u8981\u62e6\u622a\u7684\u5f02\u5e38\u7c7b\u578b\uff0c\u4e0a\u9762\u62e6\u622a\u4e86 Exception.class \u8fd9\u79cd\u5f02\u5e38\u3002<\/p>\n\n\n\n<p><strong>\u4e8c\u3001\u81ea\u5b9a\u4e49\u5f02\u5e38\u5904\u7406\uff08\u5168\u5c40\u5f02\u5e38\u5904\u7406\uff09<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>spring boot \u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f1a\u6620\u5c04\u5230 \/error \u8fdb\u884c\u5f02\u5e38\u5904\u7406\uff0c\u4f46\u662f\u63d0\u793a\u5e76\u4e0d\u5341\u5206\u53cb\u597d\uff0c\u4e0b\u9762\u81ea\u5b9a\u4e49\u5f02\u5e38\u5904\u7406\uff0c\u63d0\u4f9b\u53cb\u597d\u5c55\u793a\u3002<\/p>\n\n\n\n<p><strong>1\u3001\u7f16\u5199\u81ea\u5b9a\u4e49\u5f02\u5e38\u7c7b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package com.sam.demo.custom;\n \n\/**\n * @author sam\n * @since 2017\/7\/17\n *\/\npublic class MyException extends RuntimeException {\n \n    public MyException(String code, String msg) {\n        this.code = code;\n        this.msg = msg;\n    }\n \n    private String code;\n    private String msg;\n \n    \/\/ getter &amp; setter\n}\n <\/pre>\n\n\n\n<p>\u6ce8\uff1aspring \u5bf9\u4e8e RuntimeException \u5f02\u5e38\u624d\u4f1a\u8fdb\u884c\u4e8b\u52a1\u56de\u6eda\u3002<\/p>\n\n\n\n<p><strong>2\u3001\u7f16\u5199\u5168\u5c40\u5f02\u5e38\u5904\u7406\u7c7b<\/strong><\/p>\n\n\n\n<p>\u521b\u5efa MyControllerAdvice.java\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package com.sam.demo.controller;\n \nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.WebDataBinder;\nimport org.springframework.web.bind.annotation.*;\n \nimport java.util.HashMap;\nimport java.util.Map;\n \n\/**\n * controller \u589e\u5f3a\u5668\n *\n * @author sam\n * @since 2017\/7\/17\n *\/\n@ControllerAdvice\npublic class MyControllerAdvice {\n \n    \/**\n     * \u5168\u5c40\u5f02\u5e38\u6355\u6349\u5904\u7406\n     * @param ex\n     * @return\n     *\/\n    @ResponseBody\n    @ExceptionHandler(value = Exception.class)\n    public Map errorHandler(Exception ex) {\n        Map map = new HashMap();\n        map.put(\"code\", 100);\n        map.put(\"msg\", ex.getMessage());\n        return map;\n    }\n    \n    \/**\n     * \u62e6\u622a\u6355\u6349\u81ea\u5b9a\u4e49\u5f02\u5e38 MyException.class\n     * @param ex\n     * @return\n     *\/\n    @ResponseBody\n    @ExceptionHandler(value = MyException.class)\n    public Map myErrorHandler(MyException ex) {\n        Map map = new HashMap();\n        map.put(\"code\", ex.getCode());\n        map.put(\"msg\", ex.getMsg());\n        return map;\n    }\n \n}\n <\/pre>\n\n\n\n<p><strong>3\u3001controller\u4e2d\u629b\u51fa\u5f02\u5e38\u8fdb\u884c\u6d4b\u8bd5\u3002<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@RequestMapping(\"\/home\")\npublic String home() throws Exception {\n \n\/\/        throw new Exception(\"Sam \u9519\u8bef\");\n    throw new MyException(\"101\", \"Sam \u9519\u8bef\");\n \n}<\/pre>\n\n\n\n<p>\u542f\u52a8\u5e94\u7528\uff0c\u8bbf\u95ee\uff1a<a href=\"http:\/\/localhost:8080\/home\">http:\/\/localhost:8080\/home<\/a>\u00a0\uff0c\u6b63\u5e38\u663e\u793a\u4ee5\u4e0bjson\u5185\u5bb9\uff0c\u8bc1\u660e\u81ea\u5b9a\u4e49\u5f02\u5e38\u5df2\u7ecf\u6210\u529f\u88ab\u62e6\u622a\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\"msg\":\"Sam \u9519\u8bef\",\"code\":\"101\"}<\/pre>\n\n\n\n<p>* \u5982\u679c\u4e0d\u9700\u8981\u8fd4\u56dejson\u6570\u636e\uff0c\u800c\u8981\u6e32\u67d3\u67d0\u4e2a\u9875\u9762\u6a21\u677f\u8fd4\u56de\u7ed9\u6d4f\u89c8\u5668\uff0c\u90a3\u4e48MyControllerAdvice\u4e2d\u53ef\u4ee5\u8fd9\u4e48\u5b9e\u73b0\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@ExceptionHandler(value = MyException.class)\npublic ModelAndView myErrorHandler(MyException ex) {\n    ModelAndView modelAndView = new ModelAndView();\n    modelAndView.setViewName(\"error\");\n    modelAndView.addObject(\"code\", ex.getCode());\n    modelAndView.addObject(\"msg\", ex.getMsg());\n    return modelAndView;\n}<\/pre>\n\n\n\n<p>\u5728 templates \u76ee\u5f55\u4e0b\uff0c\u6dfb\u52a0 error.ftl\uff08\u8fd9\u91cc\u4f7f\u7528freemarker\uff09 \u8fdb\u884c\u6e32\u67d3\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!DOCTYPE html>\n&lt;html lang=\"en\">\n&lt;head>\n    &lt;meta charset=\"UTF-8\">\n    &lt;title>\u9519\u8bef\u9875\u9762&lt;\/title>\n&lt;\/head>\n&lt;body>\n    &lt;h1>${code}&lt;\/h1>\n    &lt;h1>${msg}&lt;\/h1>\n&lt;\/body>\n&lt;\/html><\/pre>\n\n\n\n<p>\u91cd\u542f\u5e94\u7528\uff0c<a href=\"http:\/\/localhost:8080\/home\">http:\/\/localhost:8080\/home<\/a>&nbsp;\u663e\u793a\u81ea\u5b9a\u7684\u9519\u8bef\u9875\u9762\u5185\u5bb9\u3002<\/p>\n\n\n\n<p>\u8865\u5145\uff1a\u5982\u679c\u5168\u90e8\u5f02\u5e38\u5904\u7406\u8fd4\u56dejson\uff0c\u90a3\u4e48\u53ef\u4ee5\u4f7f\u7528 @RestControllerAdvice \u4ee3\u66ff @ControllerAdvice \uff0c\u8fd9\u6837\u5728\u65b9\u6cd5\u4e0a\u5c31\u53ef\u4ee5\u4e0d\u9700\u8981\u6dfb\u52a0 @ResponseBody\u3002<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\uff1aSpring Boot \u7cfb\u5217\uff08\u516b\uff09@ControllerAdvice \u62e6\u622a\u5f02\u5e38\u5e76\u7edf\u4e00\u5904\u7406 \u5728spring [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,27],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/6576"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6576"}],"version-history":[{"count":2,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/6576\/revisions"}],"predecessor-version":[{"id":6578,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/6576\/revisions\/6578"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}