异常抛出&捕获
在程序中遇到异常信息时 , 一般都应该抛到最上层进行处理.怎样抛出需要注意 , 在特殊情况(比如入参丢失) 最好抛出指定异常.
一 主动抛出异常
第一步 抛出异常
1. throw new RuntimeException
if (url == null) {
throw new RuntimeException("url is null");
}
直接返回自定义异常
优点:方便,在不返回给前台时适合使用
缺点:如果不在之后抓取 前台的Http status 会为500 服务器错误,如果没看过文档可能会有歧义.
wiki
将所有“CheckedException”转换为“RuntimeException”或其子类(如IllegalArgumentException),抛出,在“顶层”统一处理。
但是必须在最上层进行捕获 , 并处理(返回给调用者)
2. 特殊情况处理
抛出指定异常
@GetMapping("url/...")
public List<Customer> getCustomerSwarm(@PathVariable("app_id") String appId )
throws MissingServletRequestParameterException {
if (StringUtils.isBlank(appId)) {
throw new MissingServletRequestParameterException("app_id","String");
}
}
new MissingServletRequestParameterException 返回报错信息 可以在入参校验时更规范化
Preconditions
Preconditions.checkNotNull(input,"input不能为空!");
guava的参数校验方法 校验失败返回 NullPointerExc