zoukankan      html  css  js  c++  java
  • 当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?

    当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?

    问题:

    orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl/html)等页面进行多大10多项的if判断,去一个一个的判断值,假如以后随着业务的增多,枚举个数越来越多,改怎么办?

     
    /**订单*/
    @Data //get/set
    //将值是null的数据剔除
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class OrderDTO {
    
        private String orderId;
    
        /**买家名字**/
        private String buyerName;
    
        /**买家手机**/
        private String buyerPhone;
    
        /**买家地址**/
        private String buyerAddr;
    
        /**用户openid**/
        private String buyerOpenid;
    
        /**订单金额**/
        private BigDecimal buyerAmount;
    
        /**订单状态, 默认状态0新订单**/
        private Integer orderStatus;
    
        /**支付状态, 默认状态0等待支付**/
        private Integer payStatus;
    
        private Date createTimestamp;
    
        private Date updateTimestamp;
    
        List<OrderDetail> orderDetailList;
    
        
    
    }
    

      

    解决方法:

    思路:

    1,新建一个interface的接口类:codeEnum,其方法有一个:Integer getCode();

    注意,因为每个枚举实体中都会有一个: Integer code的属性,所以适用.

    2.在建一个公用的EnumUtil公具类,将code值,和枚举类(泛型)传入其中,并且在返回类型中对枚举进行说明,限制其必须是实现codeEnum的getCode方法

    比如:<T(泛型) extends codeEnum> T 这样就能调用 getCode方法

    3.所有枚举类需要实现codeEnum类,及其getCode方法

    大概思路有了,那么代码:

    codeEnum.java

    public interface CodeEnum {
    
        Integer getCode();
    }
    

      

    OrderStatusEnum.java

    @Getter //get/set
    public enum  OrderStatusEnum implements CodeEnum {
    
        NEW(0, "新订单"),
        FINISHED(1, "完结"),
        CANCEL(2, "取消");
    
        private Integer code;
    
        private String message;
    
    
        OrderStatusEnum(Integer code, String message) {
            this.code = code;
            this.message = message;
        }
    }
    

      

    PayStatus.java

    @Getter //get
    public enum  PayStatusEnum implements CodeEnum {
    
        WAIT(0, "等待支付"),
        SUCCESS(1, "支付完成");
    
        private Integer code;
    
        private String message;
    
        PayStatusEnum(Integer code, String message) {
            this.code = code;
            this.message = message;
        }
    }
    

      

    EnumUtil.java

    public class EnumUtil {
    
        /**
         * 1.Class<T> enumClass枚举类
         * 2.<T extends CodeEnum>对枚举的说明,enumClass需要继承CodeEnum,才能调用each.getCode()方法
         * @param code
         * @param enumClass
         * @param <T>
         * @return
         */
        public  static <T extends CodeEnum>T getByCode(Integer code, Class<T> enumClass)
        {
            for (T each: enumClass.getEnumConstants())
            {
                if(code.equals(each.getCode()))
                {
                    return each;
                }
            }
            return null;
        }
    }
    

      

    然后在DTO实体类中可以这样写了

    /**
         * 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,
         * 此注解表示屏蔽此字段的输出
         **/
        @JsonIgnore
        public OrderStatusEnum getOrderStatusEnum()
        {
            return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);
        }
    
        /**
         * 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,
         * 此注解表示屏蔽此字段的输出
         **/
        @JsonIgnore
        public PayStatusEnum getPayStatusEnum()
        {
            return EnumUtil.getByCode(payStatus, PayStatusEnum.class);
        }
    

      

    完成代码:

    /**订单*/
    @Data //get/set
    //将值是null的数据剔除
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class OrderDTO {
    
        private String orderId;
    
        /**买家名字**/
        private String buyerName;
    
        /**买家手机**/
        private String buyerPhone;
    
        /**买家地址**/
        private String buyerAddr;
    
        /**用户openid**/
        private String buyerOpenid;
    
        /**订单金额**/
        private BigDecimal buyerAmount;
    
        /**订单状态, 默认状态0新订单**/
        private Integer orderStatus;
    
        /**支付状态, 默认状态0等待支付**/
        private Integer payStatus;
    
        private Date createTimestamp;
    
        private Date updateTimestamp;
    
        List<OrderDetail> orderDetailList;
    
        /**
         * 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,
         * 此注解表示屏蔽此字段的输出
         **/
        @JsonIgnore
        public OrderStatusEnum getOrderStatusEnum()
        {
            return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);
        }
    
        /**
         * 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,
         * 此注解表示屏蔽此字段的输出
         **/
        @JsonIgnore
        public PayStatusEnum getPayStatusEnum()
        {
            return EnumUtil.getByCode(payStatus, PayStatusEnum.class);
        }
    
    }
    

      

    然后在模板渲染中可这样:

     ${orderDTO.getOrderStatusEnum().message}

    <#list orderDTOPage.content as orderDTO>
                    <tr>
                        <td>
                            ${orderDTO.orderId}
                        </td>
                        <td>
                            ${orderDTO.buyerName}
                        </td>
                        <td>
                            ${orderDTO.buyerPhone}
                        </td>
                        <td>
                            ${orderDTO.buyerAddr}
                        </td>
                        <td>
                            ${orderDTO.buyerAmount}
                        </td>
                        <td>
                            ${orderDTO.getOrderStatusEnum().message}
                        </td>
                        <td>
                            ${orderDTO.getPayStatusEnum().message}
                        </td>
                        <td>
                            ${orderDTO.createTimestamp}
                        </td>
                    </tr>
                    </#list>
    

      


    /**订单*/
    @Data //get/set
    //将值是null的数据剔除
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class OrderDTO {

    private String orderId;

    /**买家名字**/
    private String buyerName;

    /**买家手机**/
    private String buyerPhone;

    /**买家地址**/
    private String buyerAddr;

    /**用户openid**/
    private String buyerOpenid;

    /**订单金额**/
    private BigDecimal buyerAmount;

    /**订单状态, 默认状态0新订单**/
    private Integer orderStatus;

    /**支付状态, 默认状态0等待支付**/
    private Integer payStatus;

    private Date createTimestamp;

    private Date updateTimestamp;

    List<OrderDetail> orderDetailList;

    /**
    * orderDTO转成json格式时,是多出getOrderStatusEnum字段,
    * 此注解表示屏蔽此字段的输出
    **/
    @JsonIgnore
    public OrderStatusEnum getOrderStatusEnum()
    {
    return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);
    }

    /**
    * orderDTO转成json格式时,是多出getOrderStatusEnum字段,
    * 此注解表示屏蔽此字段的输出
    **/
    @JsonIgnore
    public PayStatusEnum getPayStatusEnum()
    {
    return EnumUtil.getByCode(payStatus, PayStatusEnum.class);
    }

    }
  • 相关阅读:
    [NOI2009]管道取珠
    Rebalance再均衡
    生产者分区写入策略
    Kafka事务
    幂等性
    消费者组
    Kafka中的重要概念
    偏移量offset
    服务注册和发现的意思,Spring cloud如何实现?
    负载平衡的意义
  • 原文地址:https://www.cnblogs.com/achengmu/p/10012155.html
Copyright © 2011-2022 走看看