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是错误信息。返回例⼦如下:
springboot架构图
所以,这时候异常就是按照我们的设置来返回。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。