标签: mapstruct

Mapstruct:如何限定IterableMapping函数

我在实体和DTO之间有一个映射器:

@Mapper(componentModel="cdi", uses = { RegionMapper.class })
public interface ClusterMapper {
    @Mapping(target="regions", ignore=true)
    ClusterDto map(Cluster entity);

    ClusterDto mapWithRegions(Cluster entity);
}
Run Code Online (Sandbox Code Playgroud)

第一个映射函数是列出实体的"简单映射",第二个映射函数用于详细视图.我想要List等价,所以我有一个注释:

@Qualifier
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Simple {
}
Run Code Online (Sandbox Code Playgroud)

并将此限定符添加到第一个映射函数和List函数:

@Mapper(componentModel="cdi", uses={RegionMapper.class})
public interface ClusterMapper {
    @Simple // <====
    @Mapping(target="regions", ignore=true)     
    ClusterDto map(Cluster entity);

    ClusterDto mapWithRegions(Cluster entity);

    @IterableMapping(qualifiedBy = Simple.class) // <====
    List<ClusterDto> map(List<Cluster> entities);

}
Run Code Online (Sandbox Code Playgroud)

但即使使用@Simple注释,我也会收到一条错误消息:

找到用于将集合元素映射到...的模糊映射方法

如何使List map(List)功能"选择"第一个映射功能?

java mapstruct

2
推荐指数
1
解决办法
4656
查看次数

Mapstruct转换抽象实体列表到dtos

我必须使用mapstruct映射抽象实体列表,但我不知道如何操作,因为我有以下错误消息:

无法为此方法生成任何实现.找不到将源元素类型映射到目标元素类型的方法或隐式转换.

public class AbstractArea {
    private List<AbstractArea> areas;

    public List<AbstractArea> getAreas() {
        return areas;
    }

    public void setAreas(List<AbstractArea> areas) {
        this.areas = areas;
    }
}

@Mapper()
public interface AbstractAreaMapper {
    ...
    List<AbstractAreaDto> abstractAreasToAbstractAreaDtos(List<AbstractArea> areaList);
}
Run Code Online (Sandbox Code Playgroud)

java mapstruct

2
推荐指数
1
解决办法
2264
查看次数

映射处理器中的内部错误:java.lang.StackOverflowError

在尝试映射我的域对象时,我收到以下 StackOverflowError 异常。我试图忽略导致循环依赖无效的属性。

我的域模型的中心是 WorkoutSet,它有一个 User 和一个练习。

如果我从 WorkoutSetMapper 中删除映射注释,则 UserMapperImpl 和 ExerciseMapperImpl 将按预期生成。

错误:(15, 1) java:映射处理器中的内部错误:com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) 处的 java.lang.StackOverflowError 在 com.sun.tools .javac.code.Types$UnaryVisitor.visit(Types.java:4652) at com.sun.tools.javac.code.Types.supertype(Types.java:2315) at com.sun.tools.javac.code.Types $13.visitClassType(Types.java:1966) at com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1955) at com.sun.tools.javac.code.Type$ClassType.accept(Type .java:786) 在 com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4571) 在 com.sun.tools.javac.code.Types.asSuper(Types.java:1952) 在com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1968) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1955) 在 com.sun.tools。代码。Type$ClassType.accept(Type.java:786) at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4571) at com.sun.tools.javac.code.Types.asSuper( Types.java:1952) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1975) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1955)在 com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) 在 com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4571) 在 com.sun .tools.javac.code.Types.asSuper(Types.java:1952) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1975) 在 com.sun.tools.javac.code。 Types$13.visitClassType(Types.java:1955) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit (类型.java:4571) 在 com.sun.tools.javac.code.Types.asSuper(Types.java:1952) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1975) 在 com.sun。 tools.javac.code.Types$13.visitClassType(Types.java:1955) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) at com.sun.tools.javac.code .Types$DefaultTypeVisitor.visit(Types.java:4571) at com.sun.tools.javac.code.Types.asSuper(Types.java:1952) …

java mapstruct

2
推荐指数
1
解决办法
5747
查看次数

使用 mapstruct 将 DTO 中的 DTO 映射到实体中的实体

我有一种情况,我在 DTO 中有另一个 DTO,我必须将其映射到其相应的实体。

我正在使用 mapstruct 并且我已经有另一个实体映射器。

DTO

public class EntityDTO {

   private AnotherEntityDTO anotherEntityDTO;
   // other fields
}
Run Code Online (Sandbox Code Playgroud)
Entity

@Entity
public class Entity {
  private AnotherEntity anotherEntity;
  // other fields
}
Run Code Online (Sandbox Code Playgroud)

如何更改 EntityMapper 接口,以便我可以将 anotherEntityDTO 映射到 anotherEntity?

谢谢。

jhipster mapstruct

2
推荐指数
1
解决办法
2854
查看次数

无法通过MapStruct从Enum To Boolean生成映射方法

通过使用将一个对象类型转换为另一个对象类型的mapstruct,我可以成功地从枚举到枚举使用.

不幸的是,我无法将Enum转换为Boolaen.我得到以下错误.

"不能映射属性'ChoiceType isPriceHigh’到'java.lang.Boolean的isPriceHigh’考虑到声明/实现的映射方法:'java.lang.Boolean的地图(ChoiceType值)’.

这是我在mapstruct中使用的方法.任何帮助将不胜感激.

干杯Alper

@ValueMappings({
        @ValueMapping(target = "true", source = "YES"),
        @ValueMapping(target = "false", source = "NO")
})
Boolean map(ChoiceType value);
Run Code Online (Sandbox Code Playgroud)

java mapping maven mapstruct

2
推荐指数
1
解决办法
2597
查看次数

MapStruct将新的计算字段添加到dto

我正在尝试将实体映射OrderOrderDTO使用MapStruct.我想添加到OrderDTO一个新字段total,此字段在原始实体中不可用Order,应使用Order(订单条目价格,数量,税金......)中提供的信息进行计算.我创建了一个新的字段total,OrderDTO我试图通过向mapper接口添加一个默认方法来映射它:

public interface OrderMapper {

    ...

    default BigDecimal orderToTotal(Order order){
        return logicToCalculateTotal();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我午餐时,构建MapStruct会启动错误

未映射的目标属性:"总计".

知道如何解决这个问题吗?

谢谢

java-8 spring-boot mapstruct

2
推荐指数
1
解决办法
1234
查看次数

mapstruct 将实体 OneToMany 映射到 DTO 并反向

我试图用一个mapstruct,我需要映射Entity与子Entity列表,我有关系,oneToMany而且manyToOne,我需要在这两种情况下的映射:

@Data
@Entity
public class EmailEntity {

private int id;  

... // some fields

@ManyToOne
private DeliveredEmailInfoEntity deliveredEmailInfo;

}
Run Code Online (Sandbox Code Playgroud)

.

@Data
@Entity
public class DeliveredEmailInfoEntity {

private int id;

... // some fields  

@OneToMany
private List<EmailEntity> emails;

}
Run Code Online (Sandbox Code Playgroud)

映射到:

@Data
public class EmailDTO {

private int id;  

... // some fields

private DeliveredEmailInfoDTO deliveredEmailInfo;

}
Run Code Online (Sandbox Code Playgroud)

.

@Data
public class DeliveredEmailInfoDTO {

private int id;

... // some fields  

private List<EmailDTO> …
Run Code Online (Sandbox Code Playgroud)

java mapstruct

2
推荐指数
1
解决办法
4172
查看次数

@Accessors(fluent = true) 来自 lombok 和 mapstruct

我有一个下游服务,我想将其 bean 映射到我的 bean。但是使用mapstruct似乎有问题。

来自下游服务的 Pojo(我无法更改其定义)

@ToString
@Getter
@Setter
@Accessors(fluent = true)
public class PojoA {
   private String stringA;
   private int integer;
}
Run Code Online (Sandbox Code Playgroud)

我想把它转换成 PojoB

@Setter
@Getter
@ToString
public class PojoB {
    private String stringB;
    private int integer;
}
Run Code Online (Sandbox Code Playgroud)

映射器接口

@Mapper
public interface PojoMapper {

    PojoMapper INSTANCE = Mappers.getMapper(PojoMapper.class);
    @Mapping(source = "stringA", target = "stringB")
    PojoB pojoAToPojoB(PojoA pojoA);
}
Run Code Online (Sandbox Code Playgroud)

这失败了,因为它无法找到 getter 作为 fluent 从 getter 中删除前缀,我知道 mapstruct 生成映射器接口的实现并使用 bean 规范(即获取和设置前缀)

有没有办法克服它?

lombok java-8 mapstruct

2
推荐指数
1
解决办法
2076
查看次数

如何在mapstruct中将@Qualifier或@Named与@AfterMapping一起使用?

在他们的文档中(这里:http ://mapstruct.org/documentation/dev/api/org/mapstruct/AfterMapping.html),他们提到 @AfterMapping 可以与 @Qualifier / @Named 一起使用来过滤,但我不能在任何地方都找不到如何以这种方式实际使用它。

我最好的猜测是像这样使用它:

@Mapper
public abstract class CustomerMapper {

    @Named("Test")
    public abstract Customer map(CustomerDto dto);

    @Named("Test")
    @AfterMapping
    public void doAfterMapping(@MappingTarget Customer customer) {
        //do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎没有任何作用(如果我删除了 @Named 注释,它可以工作,但它也用于我不想要的其他方法中)。有谁知道需要如何使用它?

java mapstruct

2
推荐指数
1
解决办法
2892
查看次数

MapStruct / Java - 转换时间戳到即时

我有这个映射器,我想将实体转换为 DTO。我的实体包含变量 createdDate ,他是 Instant ,我的 DTO 包含 commentedDate ,他是时间戳。

我不知道如何通过 MapStruct 将 Instant 自动转换为 Timestamp。

public interface BlogMapper {
    @Mappings({
            @Mapping(target = "userId", source = "user.id"),
            @Mapping(target = "commentedDate", source = "createdDate")
    })
    BlogDto entityToDto(final Comment entity);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 :)

java spring mapstruct

2
推荐指数
1
解决办法
3985
查看次数

标签 统计

mapstruct ×10

java ×7

java-8 ×2

jhipster ×1

lombok ×1

mapping ×1

maven ×1

spring ×1

spring-boot ×1