您的位置:首页 > 编程语言 > Java开发

springboot学习笔记3(全局错误页面)

2017-05-30 00:00 501 查看
在生产中,web程序后台处理异常报错,页面显示异常信息,这对用户来说非常不友好。springboot默认提供了对所有异常处理方法,针对服务客户端,以json格式返回异常信息,响应状态码;对浏览器客户端,响应一个单一的提示页面。springboot也提供了多个我们可选择可配置的异常处理解决方案。下面就简单的介绍一种方式。

1.自定义异常页面

不同的异常,客户端会返回不同的http响应状态码:(404,403,500等)。我们可以定义以这些状态码为名字的文件名:404.html.500.html。服务的响应异常时候,就会跳转到对应状态码的页面。这些页面必须在error目录下:





现在定义一个404.html页面,然后在浏览器随便输入一个地址:localhost:8080/test/test...(如上图)

2.对于restful风格,请求返回的都是json格式数据。我们可以在这样定义一个类

@ControllerAdvice(basePackages = "com.test")
public class AdviceConfigurer extends ResponseEntityExceptionHandler {
@ExceptionHandler({ Exception.class })
@ResponseBody
ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
HttpStatus status = getStatus(request);
Map<String, Object> map = new HashMap<String, Object>();
#状态码
map.put("status", status.value());
#标识失败
map.put("flag", "01");
#异常信息
map.put("message", ex.getMessage());

return new ResponseEntity<>(map, status);
}

private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
return HttpStatus.valueOf(statusCode);
}
}

定义一个restful风格处理类,在浏览器中访问:

@RestController public class TestController {
@Resource
private PersonRepository  personRepository;

@GetMapping(value = "/test")
public Person test(){
String s=null;
Person p = personRepository.findOne(s);
return p;
}




注意;并不是所有异常都会返回json格式信息,可能会返回配置的错误页面,这样看具体的异常类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息