springboot错误信息返回与自定义异常处理

在很多系统中,我们可能在运行时出现各种异常,有系统异常,代码异常,自定义的异常。这时候我们就要把这些错误异常信息返回去给客户端查看才知道是哪里出问题。这里我们就说说spring boot的异常处理。

springboot错误信息返回:

实际上,如果我们访问一个url,不同的客户端可能返回的信息不一样,比如浏览器返回错误页面,手机客户端返回json数据。

下面这段代码是springboot框架中抛出一个异常,那么springboot面对电脑浏览器和客户端会做出什么不同的返回信息呢?

   
        @RequestMapping(value="/ones/{id:\\d+}",method=RequestMethod.GET)
        public User findByNumber2(@PathVariable(value="id")String number,@RequestHeader(name="User-Agent") String usergent) {
            throw new RuntimeException("错误了");
        }

访问客户端时(如手机app,这里用postman模拟),返回的信息是:

用浏览器访问又会怎么样呢?

如上图,返回了一个错误页面。

总结:这是springboot默认的对这种restful服务的错误的处理。默认情况下,大多数可以这样处理。但是有些情况下,默认的机制不符合我们对错误信息的处理。那么我们该怎么自定义这些错误处理的行为。

(1)例如我们访问一个本url下不存在的路径,那么返回的信息由我们自定义。

第一步:在src/main/resources文件夹下建立一个文件夹,叫做resources,然后再在这个新文件夹下建立一个文件夹叫error.

在这个error文件夹下,我们可以写一些html,即自定义的错误页面。如404.html,500.html.

然后用浏览器访问一个不存在的路径时,就会出现这个自定义的404.html页面。

这种配置下,用客户端访问时仍然出现json数据,而不是错误页:

所以,自定义的错误html只对浏览器产生影响,对客户端app仍然返回json

(2)对于客户端app访问时只返回json错误信息,我们从上图得知,默认情况下,springboot只会把message信息返回去,所以这种情况下我们得自定义一些异常。

第一步,首先定义一个类,这个类是全局异常处理类,

如上图,@ControllerAdvice这个注解将这个类作为全局异常处理类,@ExceptionHandler注解里面是自定义异常类,当抛出这个异常时,这个方法就会处理异常,@ResponseStatus注解代表返回给前端的状态码。一般都是用Map<String,Object>做返回值,用来放错误信息,key是参数,value是错误信息。返回例子如下:

所以,这时候异常就是按照我们的设置来返回。

猜你喜欢

转载自blog.csdn.net/lwg_1540652358/article/details/84201556