EasyPoi实现多语言国际化

249 阅读1分钟

NoSuchFieldException:这是一种反射异常,表示在尝试使用反射(通过类的属性,方法等信息)获取或访问一个不存在的字段(成员变量)时抛出的异常.例如,当使用"getField"或"getDeclaredField"方法来获取一个类的字段,但该字段在类中不存在时,就会抛出异常.

IllegalAccessException:这是一种访问权限异常,表示在尝试访问类的某个成员(字段,方法等)时,由于访问权限不足而无法成功访问.例如,如果尝试访问一个私有字段或方法,或者由于某种安全性限制而无法访问,就会导致"IllegalAccessException".

EasyPoi实现多语言国际化

下列方法中未写出如何国际化的具体逻辑,可根据自己项目实际情况做相应修改.

public static Class setExcelName (Class<?> entityClass) throws NoSuchFieldException, IllegalAccessException {

    //获取实体类中全部字段
    Field[] fields = entityClass.getDeclaredFields();

    for (Field field : fields) {
        //获取字段上的注解
        Excel anoExcel = field.getAnnotation(Excel.class);
        if (anoExcel != null) {
            //获取代理处理器
            InvocationHandler invocationHandler = Proxy.getInvocationHandler(anoExcel);
            //获取私有memberValues属性
            Field f = invocationHandler.getClass().getDeclaredField("memberValues");
            f.setAccessible(true);
            //获取实例的属性map
            Map<String, Object> memberValues = (Map<String, Object>) f.get(invocationHandler);
            //获取属性值
            String excelName = (String) memberValues.get("name");
            memberValues.put("name", newName);
        }
    }

    return entityClass;
}