Dozer自定义枚举转换器: Enum与Integer转换

本文介绍了在Dozer映射过程中遇到的枚举与Integer转换问题。当PO对象的属性为Integer,而DO或VO使用枚举表示时,如果枚举的index与Integer不一致,会导致转换错误。通过场景模拟展示了问题所在,并提出了自定义DozerConverter的解决方案,以应对复杂枚举转换需求。
摘要由CSDN通过智能技术生成

一些情况下, 比如PO属性为Integer值1, 0表示是, 否. 而有个DO或者VO属性用枚举表示是否. 如果这个枚举的index跟Integer不对应, 就会导致dozer复制枚举与数字转换出错.

场景模拟

需求: 库中定义1, 0 表示是, 否, Flag 枚举的code'2', '1' 表示 是, 否, name 对应为yes, no. 当然要尽量避免出现这种情况.

  • 枚举 Flag
 public enum
  
   
   
   
    
    Flag
   
    {
    no(
  
  "1", "否"), yes("2", "是"), other("0", "其它");

    private static
  
  
   
    Map<String, 
   
   
    
    Flag
   
   > valueMap = 
  
  new HashMap<>(); 
    static {
        for
  
  
   
    (
   
   
    
    Flag
   
    e : 
   
   
    
    Flag
   
   .values()) {
            valueMap.put(e.code, e);
        }
    }

    
  
  private String code;
    private String name;

    private 
   
   
    
    
     
     Flag
    
    
   
   (String code, String name) {
        this.code = code;
        this.name = name;
    }

    public String getCode() {
        return this.code;
    }

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

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static
  
   
   
   
    
    Flag
   
    
  
  valueOfCode
  
  
   
   (String code) {
        
   
   
    
    Flag
   
    result = valueMap.get(code);
        
  
  if (result == null) {
            throw new IllegalArgumentException("未知的枚举类型:" + code + 
   
   
    
    ",请核对枚举 
    
    
     
     Flag
    
    "
   
   );
        }
        return result;
    }

}
  • PO
public class SysUserPo extends BasePo implements Serializable {
   
    private String loginName;

    private String password;

    private String salt;

    private String userName;

    private String email;

    private String phone;

    private Integer status;

    private Integer deleteStatus;

    private Integer isAdmin;

    private static final long serialVersionUID = 1L;

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName == null ? null : loginName.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值