Java:如何正确地使用异常详解 冷不防 2022-05-21 13:27 187阅读 0赞 # 概述: # Java中的异常机制是一个好东西。不过好东西也要正确地使用才行,不然就会让我们错误地认识它。在错误地认识状况下,就会错误地使用。这样就成了一个恶性地循环了。这不是我们愿意看到的。不要以为我们已经可以很好地使用异常了,下面就针对部分问题作一个讲解。这部分的问题中,有一些是来自《Effective Java》这本书中,有一部分是来自本人平时开发过程中遇到的。 本文链接:[http://blog.csdn.net/lemon\_tree12138/article/details/50474230][http_blog.csdn.net_lemon_tree12138_article_details_50474230] -- [Coding-Naga][] # 1.是throw还是try-catch # 这个是一个对刚接触编程开发的人来说,经常面临但又选择不好的问题。 由于我们开发的项目可不是像写Demo一样轻松,这里可能会有很多层次结构。我们要在具体哪一层的什么位置是使用try-catch这个异常呢,还是把异常throw到上一层呢?这里,我们首先要知道一件事,那就是try-catch和throw分别会发生什么情况呢? try-catch: 捕获一个异常情况,并中止try块中的后续操作。且不会再向上抛出异常了。 throw: 当使用throw抛出一个异常时,当前的执行块(方法)会结束后续的执行。相当于一个return操作,并保证了上层在调用的时候可以捕获到这个异常,并做相应处理。 Demo示例如下: 1. public class ExceptionClient\{ 2. 3. public static void main(String\[\] args)\{ 4. ExceptionClient client = new ExceptionClient(); 5. 6. client.showInfo(); 7. \} 8. 9. private void showInfo()\{ 10. try \{ 11. System.out.println( "first info"); 12. testException(); 13. System.out.println( "second info"); 14. \} catch (Exception e) \{ 15. System.err.println(e); 16. \} 17. 18. System.out.println( "outside info"); 19. \} 20. 21. private void testException() throws AException \{ 22. boolean f = true; 23. if (f) \{ 24. throw new AException( "AException"); 25. \} 26. 27. System.out.println( "f is false."); 28. \} 29. \} 按照上面对try-catch和throw的分析,可以知道,showInfo方法try块中的第二句话是不打印的,而testException方法的最后一句也是不打印的。结果如下: ![Center][] 图-1 try-catch测试结果 # 2.是使用受检的异常还是非受检的异常 # 首先我们要了解什么是受检异常和非受检异常,不过这里顾名思义,受检即接受检查。由于目前的IDE很是智能,当我们在使用受检异常而未try-catch这个异常时,IDE会给出错误提示。如下: ![Center 1][] 图-2 IDE对受检异常的检查 而非受检异常则不会被IDE识别。还有一点,因为前面说到IDE会检测到受检异常,所以,这里如果我们强行运行此代码,是通不过编译的,非受检异常则不会。 好了,说明了受检异常和非受检异常在使用过程中的区别。现在就来说说怎么创建这些不同的异常吧。 当我们要编写自定义的受检异常A.java时,A的class需要继承Exception,而非受检异常B.java则是继承RuntimeException。 由于受检异常会在使用的过程,强行限制开发人员去try-catch。而在try-catch此异常的时候,开发人员则可以对此异常进行修正并重新之前的操作(即恢复)。在RuntimeException中则没有这样的限制。所以,当我们试图告诉调用者,当前的异常是可以被修复,并允许重新去调用的时候,我们就使用受检的异常,当我们认为这是一个程序错误的时候,则需要使用非受检异常。 可能对在何时使用受检异常或非受检异常有了一些基本认识,然后你可能会问这样的一个问题:我们不是还有一个Error么,那么错误(Error)和异常有什么区别呢?下面就列举了这两者之间的区别 Exception: 1.可以是可被控制(checked) 或不可控制的(unchecked)。 2.表示一个由程序员导致的错误。 3.应该在应用程序级被处理。 Error: 1.总是不可控制的(unchecked)。 2.经常用来用于表示系统错误或低层资源的错误。 3.如何可能的话,应该在系统级被捕捉。 # 3.只针对不正确的条件才使用异常 # 关于这一点,首先我们应该了解的是Java在进行异常检查时消耗的系统资源,要比普通的程序调用高。那么,如果我们的程序在不停地进行异常检查,就会对程序整个的性能产生不小的影响。我们可以从一个小例子中看出这一点。如下: 假设现有10000000个元素的List,我们要对此List进行遍历,有三种方式,分别如下: ## 第一种:对每一种情况进行异常检查 ## 1. private void call\_1(List<Integer> list)\{ 2. long t = System.currentTimeMillis(); 3. try \{ 4. int index = 0; 5. while( true) \{ 6. list.get(index++); 7. \} 8. \} catch (IndexOutOfBoundsException e) \{ 9. LogUtils.printTimeUsed( "不针对检查异常", t); 10. \} 11. \} ## 第二种:只对错误的情况进行异常检查 ## 1. private void call\_2(List<Integer> list)\{ 2. long t = System.currentTimeMillis(); 3. t = System.currentTimeMillis(); 4. int size = list.size(); 5. int index = 0; 6. while( true) \{ 7. if (index >= size) \{ 8. try \{ 9. list.get(index++); 10. \} catch (IndexOutOfBoundsException e) \{ 11. LogUtils.printTimeUsed( "针对性检查异常", t); 12. break; 13. \} 14. \} 15. list.get(index++); 16. \} 17. \} ## 第三种:普通的循环遍历 ## 1. private void call\_3(List<Integer> list)\{ 2. long t = System.currentTimeMillis(); 3. t = System.currentTimeMillis(); 4. int size = list.size(); 5. int index = 0; 6. for (index = 0; index < size; index++) \{ 7. list.get(index++); 8. \} 9. 10. LogUtils.printTimeUsed( "循环遍历", t); 11. \} ## 测试结果: ## ![20160119133623953][] 图-3 不同异常检查方式遍历List 从上面的测试结果中,我们可以看到不针对地检查异常(盲目地检查异常),比有针对性地检查异常性能上低了不少。所以,我们在使用异常的时候,请格外谨慎。需要去避免一些不必要的异常检查,以优化我们的程序代码 # **异常的一种经典应用:** # ## api异常设计 ## 大致有两种抛出的方法: 1. 抛出带状态码RumtimeException异常 2. 抛出指定类型的RuntimeException异常 这个是在设计service层异常时提到的,通过对service层的介绍,我们在service层抛出异常时选择了第二种抛出的方式,不同的是,在api层抛出异常我们需要使用这两种方式进行抛出:要指定api异常的类型,并且要指定相关的状态码,然后才将异常抛出,这种异常设计的核心是让调用api的使用者更能清楚的了解发生异常的详细信息,除了抛出异常外,我们还需要将状态码对应的异常详细信息以及异常有可能发生的问题制作成一个对应的表展示给用户,方便用户的查询。(如github提供的api文档,微信提供的api文档等),还有一个好处:如果用户需要自定义提示消息,可以根据返回的状态码进行提示的修改。 ### api验证约束 ### 首先对于api的设计来说,需要存在一个dto对象,这个对象负责和调用者进行数据的沟通和传递,然后dto->domain在传给service进行操作,这一点一定要注意,第二点,除了说道的service需要进行基础判断(null判断)和jsr 303验证以外,同样的,api层也需要进行相关的验证,如果验证不通过的话,直接返回给调用者,告知调用失败,不应该带着不合法的数据再进行对service的访问,那么读者可能会有些迷惑,不是service已经进行验证了,为什么api层还需要进行验证么?这里便设计到了一个概念:编程中的墨菲定律,如果api层的数据验证疏忽了,那么有可能不合法数据就带到了service层,进而讲脏数据保存到了数据库。 所以缜密编程的核心是:永远不要相信收到的数据是合法的。 ### api异常设计 ### 设计api层异常时,正如我们上边所说的,需要提供错误码和错误信息,那么可以这样设计,提供一个通用的api超类异常,其他不同的api异常都继承自这个超类: <table style="border-spacing:0px;width:620px;border:0px;font-size:12px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tbody style="background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tr style="border-top:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <td style="border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;color:rgb(175,175,175);"> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 1 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 2 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 3 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 4 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 5 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 6 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 7 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 8 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 9 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 10 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 11 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 12 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 13 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 14 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 15 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 16 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 17 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 18 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 19 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 20 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 21 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 22 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 23 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 24 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 25 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 26 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 27 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 2 </div></td> <td style="width:585.5px;border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;"> <div style="margin-left:-10px;width:640px;border:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">class</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">extends</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">RuntimeException { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">protected</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Long errorCode ;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">protected</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Object data ;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException(Long errorCode,String message,Object data,Throwable e){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">super</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(message,e);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">this</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">.errorCode = errorCode ;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">this</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">.data = data ;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException(Long errorCode,String message,Object data){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">this</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(errorCode,message,data,</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">null</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException(Long errorCode,String message){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">this</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(errorCode,message,</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">null</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">,</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">null</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException(String message,Throwable e){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">this</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">null</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">,message,</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">null</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">,e);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException(){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException(Throwable e){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">super</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(e);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Long getErrorCode() { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">return</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">errorCode;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">void</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">setErrorCode(Long errorCode) { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">this</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">.errorCode = errorCode;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Object getData() { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">return</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">data;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">void</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">setData(Object data) { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">this</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">.data = data;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> </div></td> </tr> </tbody> </table> 然后分别定义api层异常:ApiDefaultAddressNotDeleteException,ApiNotFindAddressException,ApiNotFindUserException,ApiNotMatchUserAddressException。 以默认地址不能删除为例: <table style="border-spacing:0px;width:620px;border:0px;font-size:12px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tbody style="background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tr style="border-top:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <td style="border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;color:rgb(175,175,175);"> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 1 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 2 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 3 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 4 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 5 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 6 </div></td> <td style="width:592px;border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;"> <div style="margin-left:-10px;width:640px;border:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">class</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiDefaultAddressNotDeleteException </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">extends</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiDefaultAddressNotDeleteException(String message) { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">super</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(AddressErrorCode.DefaultAddressNotDeleteErrorCode, message, </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">null</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> </div></td> </tr> </tbody> </table> AddressErrorCode.DefaultAddressNotDeleteErrorCode就是需要提供给调用者的错误码。错误码类如下: <table style="border-spacing:0px;width:630px;border:0px;font-size:12px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tbody style="background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tr style="border-top:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <td style="border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;color:rgb(175,175,175);"> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 1 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 2 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 3 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 4 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 5 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 6 </div></td> <td style="width:602px;border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;"> <div style="margin-left:-10px;width:640px;border:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">abstract</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">class</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">AddressErrorCode { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">static</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">final</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Long DefaultAddressNotDeleteErrorCode = 10001L;</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,130,0);">//默认地址不能删除</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">static</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">final</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Long NotFindAddressErrorCode = 10002L;</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,130,0);">//找不到此收货地址</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">static</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">final</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Long NotFindUserErrorCode = 10003L;</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,130,0);">//找不到此用户</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">static</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">final</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Long NotMatchUserAddressErrorCode = 10004L;</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,130,0);">//用户与收货地址不匹配</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> </div></td> </tr> </tbody> </table> ok,那么api层的异常就已经设计完了,在此多说一句,AddressErrorCode错误码类存放了可能出现的错误码,更合理的做法是把他放到配置文件中进行管理。 ### api处理异常 ### api层会调用service层,然后来处理service中出现的所有异常,首先,需要保证一点,一定要让api层非常轻,基本上做成一个转发的功能就好(接口参数,传递给service参数,返回给调用者数据,这三个基本功能),然后就要在传递给service参数的那个方法调用上进行异常处理。 此处仅以添加地址为例: <table style="border-spacing:0px;width:620px;border:0px;font-size:12px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tbody style="background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tr style="border-top:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <td style="border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;color:rgb(175,175,175);"> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 1 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 2 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 3 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 4 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 5 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 6 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 7 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 8 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 9 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 10 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 11 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 12 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 13 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 14 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 15 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 16 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 17 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 18 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> <br> </div></td> <td style="width:585.5px;border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;"> <div style="margin-left:-10px;width:640px;border:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@Autowired</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">private</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">IAddressService addressService;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">/**</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">* 添加收货地址</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">* @param addressDTO</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">* @return</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">*/</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@RequestMapping</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(method = RequestMethod.POST)</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">AddressDTO add(</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@Valid</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@RequestBody</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">AddressDTO addressDTO){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Address address = </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">new</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Address();</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">BeanUtils.copyProperties(addressDTO,address);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Address result;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">try</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">{ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">result = addressService.createAddress(addressDTO.getUid(), address);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">catch</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(NotFindUserException e){ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">throw</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">new</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiNotFindUserException(</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#0000FF;">"找不到该用户"</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">catch</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(Exception e){ </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,130,0);">//未知错误</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">throw</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">new</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException(e);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">AddressDTO resultDTO = </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">new</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">AddressDTO();</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">BeanUtils.copyProperties(result,resultDTO);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">resultDTO.setUid(result.getUser().getId());</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">return</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">resultDTO;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> </div></td> </tr> </tbody> </table> 这里的处理方案是调用service时,判断异常的类型,然后将任何service异常都转化成api异常,然后抛出api异常,这是常用的一种异常转化方式。相似删除收货地址和获取收货地址也类似这样处理,在此,不在赘述。 ### api异常转化 ### 已经讲解了如何抛出异常和何如将service异常转化为api异常,那么转化成api异常直接抛出是否就完成了异常处理呢? 答案是否定的,当抛出api异常后,我们需要把api异常返回的数据(json or xml)让用户看懂,那么需要把api异常转化成dto对象(ErrorDTO),看如下代码: <table style="border-spacing:0px;border:0px;font-size:12px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tbody style="background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tr style="border-top:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <td style="border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;color:rgb(175,175,175);"> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 1 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 2 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 3 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 4 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 5 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 6 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 7 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 8 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 9 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 10 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 11 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 12 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 13 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 14 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 15 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 16 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 17 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 18 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 19 </div></td> <td style="border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;"> <div style="margin-left:-10px;width:640px;border:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@ControllerAdvice</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(annotations = RestController.</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">class</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">)</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">class</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiExceptionHandlerAdvice { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">/**</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">* Handle exceptions thrown by handlers.</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">*/</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@ExceptionHandler</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(value = Exception.</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">class</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">)</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@ResponseBody</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">public</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ResponseEntity<ErrorDTO> exception(Exception exception,HttpServletResponse response) { </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ErrorDTO errorDTO = </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">new</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ErrorDTO();</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">if</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">(exception </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">instanceof</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException){ </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,130,0);">//api异常</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ApiException apiException = (ApiException)exception;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">errorDTO.setErrorCode(apiException.getErrorCode());</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">else</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">{ </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,130,0);">//未知异常</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">errorDTO.setErrorCode(0L);</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">errorDTO.setTip(exception.getMessage());</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ResponseEntity<ErrorDTO> responseEntity = </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">new</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ResponseEntity<>(errorDTO,HttpStatus.valueOf(response.getStatus()));</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">return</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">responseEntity;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@Setter</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#808080;">@Getter</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">class</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">ErrorDTO{ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">private</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">Long errorCode;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;font-weight:bold;min-height:auto;color:rgb(0,102,153);">private</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">String tip;</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> </div></td> </tr> </tbody> </table> ok,这样就完成了api异常转化成用户可以读懂的DTO对象了,代码中用到了@ControllerAdvice,这是spring MVC提供的一个特殊的切面处理。 当调用api接口发生异常时,用户也可以收到正常的数据格式了,比如当没有用户(uid为2)时,却为这个用户添加收货地址,postman(Google plugin 用于模拟http请求)之后的数据: <table style="border-spacing:0px;width:620px;border:0px;font-size:12px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tbody style="background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <tr style="border-top:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <td style="border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;color:rgb(175,175,175);"> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 1 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 2 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 3 </div> <div style="border-width:0px 3px 0px 0px;border-right-style:solid;border-right-color:rgb(108,226,108);background-image:none;line-height:1.1em;text-align:right;vertical-align:baseline;min-height:auto;"> 4 </div></td> <td style="width:592px;border-width:0px;font-size:12px;vertical-align:baseline;background:none;line-height:1.1em;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;"> <div style="margin-left:-10px;width:640px;border:0px;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">{ </code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#0000FF;">"errorCode"</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">: </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:rgb(0,153,0);">10003</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">,</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#0000FF;">"tip"</code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">: </code> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#0000FF;">"找不到该用户"</code> </div> <div style="border:0px;background-image:none;line-height:1.1em;vertical-align:baseline;min-height:auto;"> <code style="border:0px;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;line-height:1.1em;vertical-align:baseline;min-height:auto;color:#000000;">}</code> </div> </div></td> </tr> </tbody> </table> api异常设计参考地址:http://www.importnew.com/28000.html 想要更多干货、技术猛料的孩子,快点拿起手机扫码关注我,我在这里等你哦~ ![70][] [http_blog.csdn.net_lemon_tree12138_article_details_50474230]: http://blog.csdn.net/lemon_tree12138/article/details/50474230 [Coding-Naga]: http://blog.csdn.net/lemon_tree12138 [Center]: /images/20220521/3f6b1db107ff496e97362fdde0b592ec.png [Center 1]: /images/20220521/3484ccf467574f13a8b4217ffff0ff05.png [20160119133623953]: /images/20220521/ec6e2b5f0738450fab38cdf6775df027.png [70]: /images/20220521/f9555490fc9f4ef6a25cabcc22edf32a.png
相关 如何在Java中正确地抛出自定义异常 在Java中,你可以通过继承`Exception`类或者自定义一个`IOException`类型来创建自定义异常。 以下是一个简单的示例,展示了如何创建和抛出一个自定义异常: 我不是女神ヾ/ 2024年09月16日 07:03/ 0 赞/ 7 阅读
相关 Java初学者:如何正确地使用JDK工具 作为Java初学者,正确使用JDK(Java Development Kit)的工具是提高编程效率的重要步骤。以下是一些基本的使用步骤: 1. **下载安装JDK**: 比眉伴天荒/ 2024年09月16日 06:03/ 0 赞/ 11 阅读
相关 如何在Java中正确地进行异常处理? 在Java中,异常处理是一种机制,用于捕获、管理和响应程序运行时出现的错误。以下是在Java中正确进行异常处理的基本步骤: 1. **抛出异常**:当你发现某个操作可能会失败 悠悠/ 2024年09月15日 19:03/ 0 赞/ 7 阅读
相关 在Java中,如何正确地使用反射机制? 反射是Java提供的一种允许程序在运行时动态地检查类、字段和方法信息的机制。 以下是在Java中正确使用反射机制的步骤: 1. 获取Class对象:反射的主要目标是操作类或 深碍√TFBOYSˉ_/ 2024年09月13日 11:06/ 0 赞/ 15 阅读
相关 Java初学者疑惑:如何正确地创建和使用对象? 在Java中,对象是类的实例。要正确地创建和使用对象,你需要遵循以下步骤: 1. **定义类**: 首先,你需要定义一个你想要创建的对象的类。例如,如果你想创建一个学生,那么 刺骨的言语ヽ痛彻心扉/ 2024年09月11日 17:33/ 0 赞/ 16 阅读
相关 Java新手疑惑:如何正确地使用泛型? 在Java中,泛型是一种类型参数化技术,它允许你在编写代码时,对容器(如List、Set或Map)的元素类型进行约束,而不是硬编码具体的类。 以下是如何正确使用泛型的基本步骤 Love The Way You Lie/ 2024年09月10日 12:27/ 0 赞/ 24 阅读
相关 Java 程序如何正确地打印日志? 在 Java 开发中,打印日志是一项非常重要的工作。正确的打印日志可以帮助我们快速定位问题,并提高代码的可维护性和可读性。本文将为大家介绍 Java 程序如何正确地打日 浅浅的花香味﹌/ 2024年03月23日 15:42/ 0 赞/ 37 阅读
相关 如何正确使用Java异常处理机制 如何正确使用Java异常处理机制 > 原文:https://www.cnblogs.com/han 朴灿烈づ我的快乐病毒、/ 2022年05月28日 01:41/ 0 赞/ 131 阅读
相关 Java:如何正确地使用异常详解 概述: Java中的异常机制是一个好东西。不过好东西也要正确地使用才行,不然就会让我们错误地认识它。在错误地认识状况下,就会错误地使用。这样就成了一个恶性地循环了。这 冷不防/ 2022年05月21日 13:27/ 0 赞/ 188 阅读
还没有评论,来说两句吧...