Mapstruct 将整个属性设置为 null,而不是嵌套类中的所有属性

问题描述 投票:0回答:1

我当前的映射器如下所示:

    public abstract OwnerResponse toOwnerResponse(Owner owner);

A

Owner
具有
id
name
等基本属性。正确映射这些属性。 现在
Owner
还有一个
address
属性,它将是一个
Address
类(带有
zip
street
等)。在某些情况下,该地址可以为空。这在 json 响应中看起来像这样:
{"id": 1, "name": "Peter", "address": {"zip": null, "street": null}}

相反,我希望整个

Owner.address
成为
null
,而不是拥有一个具有很多
Address
属性的整个
null
类。例子:
{"id": 1, "name": "Peter", "address": null}

我如何实现这一目标?

java mapstruct
1个回答
0
投票

@Mapping 注解指定对地址字段使用自定义的 QualifiedByName 方法 toAddressResponse()。此方法检查 Address 对象是否为空或其所有字段是否为空。如果是,则返回null;否则,它将继续进行法线贴图。

@Mapper
public interface OwnerMapper {

    @Mapping(target = "address", qualifiedByName = "toAddressResponse")
    OwnerResponse toOwnerResponse(Owner owner);

    @Named("toAddressResponse")
    default AddressResponse toAddressResponse(Address address) {
        if (address == null || (address.getZip() == null && address.getStreet() == null)) {
            return null;
        }
        return new AddressResponse(address.getZip(), address.getStreet());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.