忽略映射器中没有映射对象中相关 属性 的字段

Ignore field in mapper without related property in mapped object

你能告诉我如何忽略另一个对象中没有相关 属性 的字段吗?

我有 Foo 和 FooDto 对象,我想要它们的映射器。在 Dto 对象中,我得到了另一个 属性 boolean isFoo,它不在 Foo 对象中。

我试过这样的想法:

@Mapper
public interface FooMapper {

    @Mappings({
            @Mapping(target = "isFoo", ignore = true)
    })
    FooDto doToDto(Foo foo);

    Foo dtoToDo(FooDto fooDto);
}

我收到错误

Unknown property "isFoo" in result type FooDto.

我做错了什么?谢谢指教。

这意味着 mapper 正在尝试 link FooDto.isFooFoo.isFoo 但它在 FooDto 上不存在。这可能会导致您丢失数据,因为 isFoo 不会在 Foo 实体上设置,因此我强烈建议在 DTO class 上添加此字段。如果你真的不想添加新的字段,你需要在上面添加另一个映射 Foo dtoToDo(FooDto fooDto) 来忽略这个字段。

MapStruct 不会查看字段的名称来查找它们的名称。它使用 JavaBeans 规范。在 Basic Mappings.

中查看更多内容

我假设您在 FooDto 中有一个名为 isFoo() 的方法,在这种情况下 属性 的名称是 foo。所以你需要做 @Mapping(target = "foo", ignore = true)