如何从包装器方法中检索 DTO?

How to retrieve DTO from wrapper method?

我有一个 getter 方法,我用 nameTransform 方法包装 getName 以使其检查我需要的验证

public InvoiceRequestDTO orderTransformer(OrderDTO orderDTO)  {

        return new InvoiceRequestDTO(nameTransform(orderDTO.getName());

    }

以及一种检查方法

private String nameTransform(String name) {
        if (orderDTO.getName().length() < 1) {
            orderDTO.setName("0000" + orderDTO.getName());
        }
        if (orderDTO.getName().length() < 2) {
            orderDTO.setName("000" + orderDTO.getName());
        }
        if (orderDTO.getName().length() < 3) {
            orderDTO.setName("00" + orderDTO.getName());
        }
        if (orderDTO.getName().length() < 4) {
            orderDTO.setName("0" + orderDTO.getName());
        }
        else orderDTO.getName();

        return nameTransform(name);
    }

如何在方法 nameTransofm 中检索 orderDTO?当我在做的时候

OrderDTO orderDTO = new OrderDTO();

它给了我空指针异常

当我正确理解您的意图后,这应该可以解决问题:

private String nameTransform(OrderDTO orderDTO) {
    String name = orderDTO.getName();
    String newName;
    int length = name.length();

    if (length < 1) {
        newName = "0000" + name;
    }
    if (length < 2) {
        newName = "000" + name;;
    }
    if (length < 3) {
        newName = "00" + name;
    }
    if (length < 4) {
        newName = "0" + name;
    } else {
        return name;
    }
    orderDTO.setName(newName);
    return nameTransform(orderDTO);
}

但我不确定你为什么需要最后一行的递归

您的 orderTransform 现在看起来像这样:

public InvoiceRequestDTO orderTransformer(OrderDTO orderDTO)  {
    return new InvoiceRequestDTO(nameTransform(orderDTO);
}

当您使用 new OrderDto() 时,它没有名称字段,这就是您获得空指针的原因。

return new InvoiceRequestDTO(OrderDto.nameFormatted());

class OrderDto {
.... 
    public String nameFormatted(){
        // check name
        if(this.name == null) {
             return "";
        }

        return String.format("%4s", this.name).replace(' ', '0');
    }
}