BeanUtils.copyProperties()字段类型不一致

今天在写接口实体类转换的时候,使用了**BeanUtils.copyProperties()**方法,但是在后面校验的时候却为空,所以去日志发现两个类里面的字段名相同,属性不同导致。

intgInfoDTO.getContractIntgPartyInfo().forEach(contractIntgPartyInfoDTO -> {
            ContractTradingIntgDTO tradingIntgDTO = new ContractTradingIntgDTO();
            BeanUtils.copyProperties(contractIntgPartyInfoDTO, tradingIntgDTO);
            contractTradingIntgDtos.add(tradingIntgDTO);
        });

实体类属性类型不一致

 /**
     *     变更综合税率
     */
    @JsonProperty(value = "changeTax")
    private BigDecimal changeTax;

    /**
     *  变更合同金额(含税)	不包括原合同金额(可能会出现负数情况)
     */
    @JsonProperty(value = "changeTaxAmount")
    private BigDecimal changeTaxAmount;

    /**
     * 变更合同金额(不含税)	不包括原合同金额(可能会出现负数情况)
     */
    @JsonProperty(value = "changeContractAmount")
    private BigDecimal changeContractAmount;
/**
     *     变更综合税率
     */
    @JsonProperty(value = "changeTax")
    private String changeTax;

    /**
     *  变更合同金额(含税)	不包括原合同金额(可能会出现负数情况)
     */
    @JsonProperty(value = "changeTaxAmount")
    private String changeTaxAmount;

    /**
     * 变更合同金额(不含税)	不包括原合同金额(可能会出现负数情况)
     */
    @JsonProperty(value = "changeContractAmount")
    private String changeContractAmount;

去查看BeanUtils.copyProperties的源码发现,spring在利用反射复制对象时,是以javaBean的规范来使用get/set方法进行设置值的。同时set方法的参与类型,在classLoader中,也会被计为函数名的一部分,所以类型必须一致,否则spring就不会对该属性进行复制相应的值。

你可能感兴趣的:(随笔--oo--,java)