用枚举校验对象属性的取值范围

public enum FieldValueMappingEnum {
    /**
     * 可选值0/1
     */
    KEY_1(new String[]{"flightStartDate", "flightEndDate","trainStartDate","carStartDate","carEndDate","remarks",
            "airportTransferStartDate","airportTransferEndDate","trainTransferStartDate","trainTransferEndDate",
            "flightIntlStartDate","flightIntlEndDate"}, new Integer[]{0, 1}),
    /**
     * 可选值0/2
     */
    KEY_2(new String[]{"carCount"}, new Integer[]{0, 2}),
    /**
     * 可选值0/1/2
     */
    KEY_3(new String[]{"flightStartCity", "flightEndCity","trainStartCity","trainEndCity","carStartCity","hotelCheckInCity",
            "hotelDate","airportTransferStartCity","trainTransferStartCity","flightIntlStartCity","flightIntlEndCity","hotelIntlCheckInCity",
            "hotelIntlDate","hotelAveragePrice","hotelIntlAveragePrice","hotelProductType","hotelIntlProductType","trainProductType",
            "carProductType","airportTransferProductType","trainTransferProductType"},
            new Integer[]{0,1,2});

    private String[] fields;
    private Integer[] values;

    FieldValueMappingEnum(String[] fields, Integer[] values) {
        this.fields = fields;
        this.values = values;
    }

    public String[] getFields() {
        return fields;
    }

    public Integer[] getValues() {
        return values;
    }
}
public class SyncTemplateValidationUtils {
  
    /**
     * 验证AoApplyTripTempVo对象的字段值是否合法
     *
     * @param vo 待验证的AoApplyTripTempVo对象
     * @param errorMessages 存储验证不通过的错误信息的列表
     * @return void
     */
    public static void validateFields(AoApplyTripTempVo vo, List<String> errorMessages) {
        for (FieldValueMappingEnum mapping : FieldValueMappingEnum.values()) {
            Set<Integer> allowedValues = new HashSet<>(Arrays.asList(mapping.getValues()));  
            for (String fieldName : mapping.getFields()) {  
                try {  
                    Field field = AoApplyTripTempVo.class.getDeclaredField(fieldName);  
                    field.setAccessible(true);  
                    Integer fieldValue = (Integer) field.get(vo);  
                    if (fieldValue != null && !allowedValues.contains(fieldValue)) {  
                        errorMessages.add("Field " + fieldName + " allowed values: " + allowedValues);
                    }
                } catch (NoSuchFieldException | IllegalAccessException e) {  
                    log.error("validateFields error:",e);
                    throw new CorpBusinessException(ApplyTripResponseCodeEnum.PARAMETER_CHECK_ERROR);
                }
            }  
        }  
    }
}

校验结果:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值