Java中如何做到优雅的异常保护?

有一段类似的代码如下所示:

public ModelAndView redirectCallback(String code, String state) {
        if (code == null || state == null || code.isEmpty() || state.isEmpty()) {
            SystemUtils.error("获取 code 或 state 参数异常 ; QueryString : " + service.getQueryString() + " ; RemoteIp : " + service.getClientIp());
            return service.returnErrorPage("参数获取异常 请联系管理人员处理");
        }

        String[] states = state.split(SPLIT);

        if (states.length != PARAM_NUMBER) {
            SystemUtils.error("参数 state 不符合要求 ; QueryString : " + service.getQueryString() + " ; RemoteIp : " + service.getClientIp());
            return service.returnErrorPage("参数 state 不符合要求 请联系管理人员处理");
        }

        String combinationMd5 = states[0];
        String sessionCode = states[1];

        if (combinationMd5 == null || sessionCode == null || combinationMd5.isEmpty() || sessionCode.isEmpty()) {
            SystemUtils.error("参数 state 解析失败 ; QueryString : " + service.getQueryString() + " ; RemoteIp : " + service.getClientIp());
            return service.returnErrorPage("参数 state 解析失败 请联系管理人员处理");
        }

        String redirectUri = null;
        Integer groupId = null;
        try {
            SysDingtalkSystem dingtalkSystem = dingtalkMapper.queryDingtalkSystem(combinationMd5);
            if (dingtalkSystem != null) {
                redirectUri = dingtalkSystem.getRedirectUri();
                groupId = dingtalkSystem.getGroupId();
            }
        } catch (Exception e) {
            SystemUtils.error("回调 URL 获取异常 数据查询异常 ; QueryString : " + service.getQueryString() + " ; RemoteIp : " + service.getClientIp(), e);
            return service.returnErrorPage("回调 URL 获取异常 请联系管理人员处理");
        }

        if (redirectUri == null || redirectUri.isEmpty() || groupId == null) {
            SystemUtils.error("回调 URL 获取失败 redirectUri 或 groupId 为空 ; QueryString : " + service.getQueryString() + " ; RemoteIp : " + service.getClientIp());
            return service.returnErrorPage("回调 URL 获取失败 请联系管理人员处理");
        }
        ...
    }

这里能够看出来,代码中判断异常情况的地方非常多,例如判断null,异常保护等,有没有什么优雅的写法?

1.null可以考虑optional类,java8新引入的,如果没有,可以考虑jdk7里面的Objects工具类
2.异常,需要在传入值得时候就全部判断ok,再传入,如果实在没办法返回值,也可以返回一个空值,但是不要返回null