在mapstruct中隐藏未映射的属性

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

我正在使用DTO对象从Spring Rest控制器中的@RequestBody中检索信息,并在json响应中使用相同的DTO对象。我想完全隐藏一些字段来回应。

我尝试了@BeanMapping(ignoreByDefault = true)which为未映射的属性返回null但我的问题是:

有没有办法根据不同的映射方法完全隐藏未映射的属性

public Class Order {
private Long id;
private String name;
private String otherField;
}

public Class OrderDto {
private Long id;
private String name;
private String otherFieldA
private String otherFieldB;
}

@Mapper
public interface OrderMapper

//..

@Mappings({
  @Mapping(target = "id", source ="id"),
  @Mapping(target = "name", source ="name"),
  @Mapping(target = "otherFieldA", source ="otherField")
  })
@BeanMapping(ignoreByDefault = true)
OrderDto fieldAOnlyOrderToOrderDtoMapper(Order order);


@Mappings({
  @Mapping(target = "id", source ="id"),
  @Mapping(target = "name", source ="name"),
  @Mapping(target = "otherFieldB", source ="otherField")
  })
@BeanMapping(ignoreByDefault = true)
OrderDto fieldBOnlyOrderToOrderDtoMapper(Order order);

}
  1. 因此调用第一个映射器的结果[

fieldAOnlyOrderToOrderDtoMapper

将返回一个没有命名属性的OrderDto对象(otherFieldB)

  1. 和第二个映射器的调用

fieldBOnlyOrderToOrderDtoMapper

将返回一个没有命名字段的OrderDto对象(otherFiledA)

mapstruct
1个回答
0
投票

你想忽略特定字段的IIUC ..这样做是这样的:

@Mapper
public interface OrderMapper

//..

@Mapping(target = "otherFieldA", source ="otherField")
@Mapping(target = "otherFieldB", ignore=true")
OrderDto fieldAOnlyOrderToOrderDtoMapper(Order order);


@Mapping(target = "otherFieldA", ignore=true)
@Mapping(target = "otherFieldB", source ="otherField")
OrderDto fieldBOnlyOrderToOrderDtoMapper(Order order);

}
© www.soinside.com 2019 - 2024. All rights reserved.