利用MapStruct实现异常映射器

target异常

package tech.foolfish.cpc.ccpbs.exception;

import java.util.Objects;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * APP充电接口异常枚举值
 * 
 * @author xuej
 *
 */
@Getter
@AllArgsConstructor
public enum AppChargeApiExceptionEnum {

  SYSTEM_FOOLFISH_API_EXCEPTION("501001","接口异常"),
	SYSTEM_FOOLFISH_TOKEN_EXCEPTION("501002","Token异常"),
	;

	/**
	 * 异常码
	 */
	private final String code;

	/**
	 * 异常信息
	 */
	private final String message;

	/**
	 * 解析异常码
	 * 
	 * @param code
	 * @return
	 */
	public static AppChargeApiExceptionEnum parse(String code) {
		AppChargeApiExceptionEnum e = resolve(code);
		if (e == null) {
			throw new IllegalArgumentException("当前异常码不存在 [" + code + "]");
		}
		return e;
	}

	/**
	 * 转化异常码
	 * 
	 * @param code
	 * @return
	 */
	private static AppChargeApiExceptionEnum resolve(String code) {
		for (AppChargeApiExceptionEnum e : values()) {
			if (Objects.equals(e.code, code)) {
				return e;
			}
		}
		return null;
	}

}

source异常

package tech.foolfish.cpc.ccpbs.exception;

import java.util.Objects;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

/**
 * 充电异常枚举值
 * 
 * @author xuej
 *
 */
@Slf4j
@Getter
@AllArgsConstructor
public enum FoolfishChargeExceptionEnum {
	
	UNKNOWN_API_ERROR_CODE("Unknown_Api_Error_Code","未知的错误码"),
	B_SYSTEM_TOKEN_EXPIRE("B_System_TokenExpire","token过期"),
	;

	/**
	 * 异常码
	 */
	private final String code;

	/**
	 * 异常信息
	 */
	private final String message;

	/**
	 * 解析异常码
	 * 
	 * @param code
	 * @return
	 */
	public static FoolfishChargeExceptionEnum parse(String code) {
		FoolfishChargeExceptionEnum e = resolve(code);
		if (e == null) {
			log.warn("未知的错误码,当前异常码不存在 [{}]", code);
			return UNKNOWN_API_ERROR_CODE;
		}
		return e;
	}

	/**
	 * 转化异常码
	 * 
	 * @param code
	 * @return
	 */
	private static FoolfishChargeExceptionEnum resolve(String code) {
		for (FoolfishChargeExceptionEnum e : values()) {
			if (Objects.equals(e.code, code)) {
				return e;
			}
		}
		return null;
	}

}

异常映射器

package tech.foolfish.cpc.ccpbs.exception;

import org.mapstruct.Mapper;
import org.mapstruct.ValueMapping;
import org.mapstruct.factory.Mappers;

/**
 * 异常映射器
 * 
 * @author xuej
 *
 */
@Mapper
public interface AppChargeExceptionMapper {

	AppChargeExceptionMapper INSTANCE = Mappers.getMapper(AppChargeExceptionMapper.class);
	
	@ValueMapping(target = "SYSTEM_FOOLFISH_API_EXCEPTION", source = "UNKNOWN_API_ERROR_CODE")
	@ValueMapping(target = "SYSTEM_FOOLFISH_TOKEN_EXCEPTION", source = "B_SYSTEM_TOKEN_EXPIRE")
	AppChargeApiExceptionEnum toAppChargeApiExceptionEnum(FoolfishChargeExceptionEnum foolfishChargeExceptionEnum);

}