业务编码

统一的业务编码处理组件,提供国际化支持(非默认,需配置开启)。

业务编码默认的配置文件名为 biz_code.properties,配置文件中的配置值可覆盖业务编码初始化器中提供的默认值,配置文件示例如下:

S0000001=系统异常,请跟管理员联系
S0000002=系统异常,信息:{0} param:{1}  param:{2}

自定义自己的业务编码

自定义的业务编码必须是枚举类型,且实现IBizcode接口才能被添加到业务编码管理器中。 类名称建议统一使用BizCode前缀,便于使用者在IDE中进行自动提示,如BizCodeSys,BizCodeUser,...,这样不用刻意查找文档,只要在IDE中输入BizCode就可诱导出各模块的自定义编码。如下:

import com.wee0.box.code.IBizCode;
public enum BizCodeTest implements IBizCode{
    SystemError("S0000001"),
    SystemErrorInfo("S0000002");

    private final String CODE;
    BizCodeTest(String code) { this.CODE = code; }
    @Override
    public String getCode() { return this.CODE; }
}

如果有提供默认值,则可以提供一个实现了IBizCodeInitializer接口的对象。如下:

import com.wee0.box.code.IBizCodeInitializer;
public class BizCodeTestInitializer implements IBizCodeInitializer{
    @Override
    public void initialize(IBizCodeSetter setter) {
        setter.set(BizCodeTest.SystemError, "系统异常,请跟管理员联系");
        setter.set(BizCodeTest.SystemErrorInfo, "系统异常,信息:{0} param:{1}  param:{2}");
    }
}

也可以合并在同一个枚举类中完成。如下:

public enum BizCodeTest implements IBizCode, IBizCodeInitializer{
    SystemError("S0000001"),
    SystemErrorInfo("S0000002");

    private final String CODE;
    BizCodeTest(String code) { this.CODE = code; }
    @Override
    public String getCode() { return this.CODE; }
    @Override
    public void initialize(IBizCodeSetter setter) {
        setter.set(SystemError, "系统异常,请跟管理员联系");
        setter.set(SystemErrorInfo, "系统异常,信息:{0} param:{1}  param:{2}");
    }
}

在Java代码中注册自定义业务枚举类和初始化器

import com.wee0.box.code.BizCodeManager;
public class App{
    public void init(){
       BizCodeManager.impl().addBizCodeEnum(BizCodeTest.class); 
       // 如果枚举类同时实现了IBizCodeInitializer接口,则不需要重复注册初始化器。
       BizCodeManager.impl().addBizCodeInitializer(new BizCodeTestInitializer());
    }
}

在框架配置文件box_config.properties中注册自定义业务枚举类和初始化器

# 业务编码枚举类,如果有多个使用逗号(,)隔开。
bizCodeManager.bizCodeEnums=test.BizCodeTest
# 业务编码默认值初始化器,如果有多个使用逗号(,)隔开。如果枚举类同时也是初始化器,不用重复配置。
bizCodeManager.bizCodeInitializers=test.BizCodeTestInitializer

使用

为了方便使用,在box-api库中提供了快捷入口类BizCodeManager,使用此类可进行常用方法的操作。如下:

import com.wee0.box.code.BizCodeManager;
import org.junit.Test;
import org.junit.Assert;
public class AppTest{
    @Test
    public void testGetCodeInfo() {
       IBizCodeInfo _bizCodeInfo = BizCodeManager.impl().getCodeInfo(BizCodeTest.SystemErrorInfo, "p1", "p2", "p3"); 
       Assert.assertNotNull(_bizCodeInfo);
       Assert.assertEquals("系统异常,信息:{0} param:{1}  param:{2}", _bizCodeInfo.getText());
       Assert.assertEquals("系统异常,信息:p1 param:p2  param:p3", _bizCodeInfo.formatText());
       Assert.assertEquals("系统异常,信息:p2 param:p1  param:p0", _bizCodeInfo.formatText("p2", "p1", "p0"));
       Assert.assertEquals("系统异常,信息:p1 param:{1}  param:{2}", _bizCodeInfo.formatText("p1"));
    }
}

业务编码在处理业务异常中的应用

import com.wee0.box.exception.BizExceptionFactory;
public class BizExceptionFactoryTest{
    public void ex1(){
        throw BizExceptionFactory.create(BizCodeTest.SystemError);
    }
    public void ex2(){
        throw BizExceptionFactory.create(BizCodeTest.SystemErrorInfo, "信息参数1", "信息参数2", "信息参数3");
    }
}

国际化支持

在框架配置文件box_config.properties中设置使用支持国际化的业务编码存储对象:

# 编码存储对象:不配置默认为simpleStore,如果需要国际化支持,则配置为i18nStore。
bizCodeManager.bizCodeStore=i18nStore

提供对应语言的业务编码配置文件,当前版本支持中文简体、中文繁体、英文。

  • config/biz_code_zh_CN.properties
  • config/biz_code_zh_TW.properties
  • config/biz_code_en.properties

使用方式与前边介绍的非国际化场景的使用方式一样,只是在需要切换语言的地方增加一个语言切换的调用,默认语言为简体中文。示例代码如下:

import com.wee0.box.i18n.Language;
import com.wee0.box.i18n.Locale;
import com.wee0.box.code.BizCodeManager;
import org.junit.Test;
import org.junit.Assert;
public class AppTest{
    @Test
    public void testGetCodeInfo() {
       IBizCodeInfo _bizCodeInfo;
       Locale.impl().setLanguage(Language.en); 
       _bizCodeInfo = BizCodeManager.impl().getCodeInfo(BizCodeTest.SystemError); 
       Assert.assertEquals("system exception", _bizCodeInfo.getText());

       Locale.impl().setLanguage(Language.zh_TW); 
       _bizCodeInfo = BizCodeManager.impl().getCodeInfo(BizCodeTest.SystemError); 
       Assert.assertEquals("系統异常", _bizCodeInfo.getText());

       Locale.impl().setLanguage(Language.zh_CN); 
       _bizCodeInfo = BizCodeManager.impl().getCodeInfo(BizCodeTest.SystemError); 
       Assert.assertEquals("系统异常", _bizCodeInfo.getText());
    }
}

results matching ""

    No results matching ""