函数式接口@FunctionalInterface

 PIG: 函数式接口让你的代码更优雅和复用性更高

package com.dj.springtest.service;

import javax.servlet.http.HttpServletResponse;

/**
 * User: ldj
 * Date: 2023/10/15
 * Time: 1:26
 * Description: 有且只有一个抽象方法,但可以定义多个 default 或 static 方法
 */
@FunctionalInterface
public interface ExceptionFunction {

    void throwException(Integer httpStatus, String errMessage, HttpServletResponse response);
}

 异常信息枚举类

package com.dj.springtest.constant;

/**
 * User: ldj
 * Date: 2023/10/15
 * Time: 2:25
 * Description: No Description
 */
public enum ApiErrorEnum {

    UNKNOWN_SYSTEM_EXCEPTION(10500,"系统发生未知异常!");

    private Integer code;
    private String message;

    ApiErrorEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

}

 lamdba表达式实现函数式接口,达到封装一个异常处理的逻辑

package com.dj.springtest.utils;

import com.dj.springtest.service.ExceptionFunction;

import java.nio.charset.StandardCharsets;

/**
 * User: ldj
 * Date: 2023/10/15
 * Time: 1:45
 * Description: 如果为true,就抛异常,否则不处理
 */
public class ExceptionUtil {

    //返回接口ExceptionFunction的匿名内部类,只使用一次哦!
    public static ExceptionFunction isTrue(Boolean flag) {

        //lambda表达式
        return (status, errMessage, response) -> {
            if (flag) {
                if (null != response) {
                    response.setStatus(status);
                    response.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8));
                }
                throw new RuntimeException(errMessage);
            }
        };
    }

    //确定要抛异常
    public static void doThrow(String errorMsg){
        ExceptionUtil.isTrue(true).throwException(null, errorMsg, null);
    }
}

测试使用案例 

package com.dj.springtest.demo;

import com.dj.springtest.constant.ApiErrorEnum;
import com.dj.springtest.utils.ExceptionUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
import org.springframework.test.context.junit4.SpringRunner;

import javax.servlet.http.HttpServletResponse;

/**
 * User: ldj
 * Date: 2023/10/15
 * Time: 2:15
 * Description:函数式接口让你的代码更优雅和复用性更高
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class ExceptionUtilTest {

    @Autowired
    private HttpServletResponse response;

    @Test
    public void testExceptionFunction() {
        //模拟入参
        boolean flag1 = false;
        boolean flag2 = true;

        //1.先看常规写法
        if (flag1) {
            throw new RuntimeException("获取用户信息出错!");
        } else {
            System.out.println("继续执行业务代码...");
        }

        //2.函数式写法
        ExceptionUtil.isTrue(flag2).throwException(HttpStatus.INTERNAL_SERVER_ERROR.value(), ApiErrorEnum.UNKNOWN_SYSTEM_EXCEPTION.getMessage(), response);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值