标签: mapstruct

Mapstruct生成的类没有被Spring在JHipster Web应用程序中注入

我正在开发一个使用JHipster v2.20.0创建的Web应用程序.使用Eclipse 4.5.0 WTP作为IDE.

Spring配置是基于注释的.

我刚刚将这个拉动与我们的代码合并.

当我尝试在Eclipse中运行应用程序时,我得到以下异常:

[INFO] com.app.tenancy.hibernate.MyCurrentTenantIdentifierResolver - MyCurrentTenantIdentifierResolver.getTenantId(): Couldn't find Company/Tenant for the domain inventario, stopping serving the request
[WARN] org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManagementResource': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.app.web.rest.mapper.UserManagementMapper com.app.web.rest.UserManagementResource.userManagementMapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.app.web.rest.mapper.UserManagementMapper] found for dependency: expected at least 1 bean which qualifies as …
Run Code Online (Sandbox Code Playgroud)

jhipster mapstruct

8
推荐指数
3
解决办法
2万
查看次数

使用mapstruct中的构建器(使用immutables注释处理器)将对象映射到不可变对象

我们使用immutables框架来生成所有DTO.现在我们想用mapstruct将这些对象映射到另一个.但是生成的DTO是不可变的,没有setter,也没有构造函数,对应于构建器模式.它们仅通过static builder()-method 访问的相应构建器填充.

我们试图将DTO1映射到DTO2.Builder,如果mapstruct能识别Builder中的setter但这些没有void返回类型但返回Builder本身以进行流畅的连接,那么它将起作用.

所以这是示例的代码.

我们有两个接口

@Value.Immutable
public interface MammalDto {
  public Integer getNumberOfLegs();
  public Long getNumberOfStomachs();
}
Run Code Online (Sandbox Code Playgroud)

@Value.Immutable
public interface MammalEntity {
  public Long getNumberOfLegs();
  public Long getNumberOfStomachs();
}
Run Code Online (Sandbox Code Playgroud)

然后我们有了maptruct的Mapper接口:

@Mapper(uses = ObjectFactory.class)
public interface SourceTargetMapper {
  SourceTargetMapper MAPPER = Mappers.getMapper( SourceTargetMapper.class );

  ImmutableMammalEntity.Builder toTarget(MammalDto source);
}
Run Code Online (Sandbox Code Playgroud)

要使用mapstruct来查找Builder,我们需要一个Factory:

public class ObjectFactory {

  public ImmutableMammalDto.Builder createMammalDto() {
    return ImmutableMammalDto.builder();
  }

  public ImmutableMammalEntity.Builder createMammalEntity() {
    return ImmutableMammalEntity.builder();
  }
}
Run Code Online (Sandbox Code Playgroud)

为了生成代码,编译器插件被指示使用两个注释处理器:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6.1</version>
    <configuration> …
Run Code Online (Sandbox Code Playgroud)

java mapping builder immutability mapstruct

8
推荐指数
1
解决办法
4053
查看次数

Intellij IDEA中的mapstruct和gradle configuratoin问题

我有一个使用gradle的项目,并将mapstruct作为依赖项之一.每当我试图建立项目时,它就失败了.我想这是因为Mapstruct将生成gradle无法找到的impl类.谁能帮助我如何在intellij IDEA中配置它?

谢谢

intellij-idea gradle mapstruct

8
推荐指数
1
解决办法
2099
查看次数

Mapstruct:仅对集合映射忽略特定字段

我使用以下映射器来映射实体:

public interface AssigmentFileMapper {

AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);

AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO);

@Mapping(target = "data", ignore = true)
List<AssigmentFileDTO> assigmentFilesToAssigmentFileDTOs(List<AssigmentFile> assigmentFiles);

List<AssigmentFile> assigmentFileDTOsToAssigmentFiles(List<AssigmentFileDTO> assigmentFileDTOs);
}
Run Code Online (Sandbox Code Playgroud)

我只需要忽略映射为集合的实体的"数据"字段.但它看起来@Mapping只适用于单个实体.另外我注意到生成的方法assigmentFilesToAssigmentFileDTOs只是用于assigmentFileToAssigmentFileDTOfor循环.那有什么解决方案吗?

java mapping mapstruct

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

MapStruct-@Mapper注释不会创建bean

我从这个来源下载了应用程序https://github.com/springframeworkguru/spring5-mvc-rest/tree/vendor-api 而且我的MapStruct有问题。

@Mapper
public interface CategoryMapper {

CategoryMapper INSTANCE = Mappers.getMapper(CategoryMapper.class);


CategoryDTO categoryToCategoryDTO(Category category);
Run Code Online (Sandbox Code Playgroud)

}

@Data
public class CategoryDTO {
    private Long id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

域类:

@Data
@Entity
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

服务等级:

@Service
public class CategoryServiceImpl implements CategoryService {

    private final CategoryMapper categoryMapper;
    private final CategoryRepository categoryRepository;

    public CategoryServiceImpl(CategoryMapper categoryMapper, CategoryRepository categoryRepository) {
        this.categoryMapper = categoryMapper;
        this.categoryRepository = categoryRepository;
    }
}
Run Code Online (Sandbox Code Playgroud)

在pom.xml依赖项中,我仅粘贴了两个:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> …
Run Code Online (Sandbox Code Playgroud)

spring mapper mapstruct

8
推荐指数
6
解决办法
8093
查看次数

将自定义方法映射器映射到Mapstruct

我正在创建一个在我的futere项目中使用Mapstruct的poc.

现在我有一个问题如何将自定义方法映射到特殊目标.

例如,我有以下接口映射器:

@Mapper
public interface ItemMapper {

    static ItemMapper INSTANCE = Mappers.getMapper(ItemMapper.class);

    @Mappings({ @Mapping(source = "number", target = "itemnumber"),
            @Mapping(source = "description", target = "description"),
            @Mapping(source = "itemClass.name", target = "ic"), @Mapping(source = "optionPart", target = "option"),
            @Mapping(source = "plannerCode.code", target = "plannercode"),
            @Mapping(source = "plannerCode.name", target = "planner"),
            @Mapping(source = "vendor.buyerCode.name", target = "buyer"),
            @Mapping(source = "vendor.buyerCode.code", target = "buyerCode"),
            @Mapping(source = "vendor.number", target = "vendor"),
            @Mapping(source = "vendor.name", target = "vendorName"), @Mapping(source = "pcsItem", target = "pcs"), …
Run Code Online (Sandbox Code Playgroud)

java mapstruct

8
推荐指数
3
解决办法
2万
查看次数

MapStruct 将对象映射到列表

我正在尝试使用 Mapstruct 将源对象映射到目标列表。执行此操作的干净映射结构方式应该是什么?

以下是我的 DTO。

源DTO

@Data
class Source
{

String a;

String b;

String C;

}

Run Code Online (Sandbox Code Playgroud)

目标DTO

@Data
class Target
{

String name;

List<Child> customList;

}

@Data
class Child
{

String attr1;

boolean attr2;

}

Run Code Online (Sandbox Code Playgroud)

我面临映射器类的问题。试图实现如下所示的目标。

public interface CustomMapper
{

@Mapper(target="customList" expression="java(new Child(a,false))"
@Mapper(target="customList"  expression="java(new Child(b,true))"
@Mapper(target="customList"  expression="java(new Child(c,false))"
Target sourceToTarget(Source source);


}
Run Code Online (Sandbox Code Playgroud)

我不想使用如下所示的qualifiedBy函数来实现此目的,因为所有转换都需要为每个元素进行编码。

List<Child> toList(Source source)
{
   List<Child> customList = new ArrayList<Child>();
   customList.add(new Child(source.getA(),false));
   customList.add(new Child(source.getB(),true)); 
   customList.add(new Child(source.getC(),false));

    return customList;
}
Run Code Online (Sandbox Code Playgroud)

java mapstruct

8
推荐指数
3
解决办法
3万
查看次数

如何使用MapStruct映射嵌套集合?

我有2个实体:

实体1:

public class Master {

    private int id;
    private Set<SubMaster> subMasters= new HashSet<SubMaster>(0);
}

public class SubMaster{
    private int subId;
    private String subName;
}
Run Code Online (Sandbox Code Playgroud)

实体2:

public class MasterDTO {

    private int id;
    private Set<SubMaster> subMasters= new HashSet<SubMaster>(0);
}

public class SubMasterDTO{
    private int subId;
    private String subName;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用MapStruct映射器将POJO的值映射到另一个。

public interface MasterMapper{
    MasterDTO toDto(Master entity);
}
Run Code Online (Sandbox Code Playgroud)

我能够成功映射MasterMasterDTO。但是,SubMasterin 的嵌套集合Master未映射到in中的对应集合MasterDTO

谁能在正确的方向帮助我?

java collections mapstruct

7
推荐指数
1
解决办法
8258
查看次数

使用mapstruct从List <Object>映射List <String>

嗨我在使用mapstruct从Child Source类设置它时,在DTO中为List操作获取null.有人可以帮我解决这个问题.请在这里找到我的代码

实体类:

public class Source {
    int id;
    String name;
    List<ChildSource> childSource;
    //getters and setters
}

public class ChildSource {
    String code;
    String action;
    //getters and setters   
}
Run Code Online (Sandbox Code Playgroud)

DestinationDTO:

public class TargetDTO{
    int sNo;
    String mName;
    List<String> actions;
    //getters and setters  
}
Run Code Online (Sandbox Code Playgroud)

MApper类:

@Mapper(componentModel = "spring")    
public abstract class SampleMapper {
        @Mappings({ 
            @Mapping(target = "id", source = "sno"),
            @Mapping(target = "name", source = "mNAme")
        })
        public abstract TargetDTO toDto(Source source);

        @IterableMapping(elementTargetType = String.class)
        protected abstract List<String> mapStringtoList(List<ChildSource> childSource);

        protected …
Run Code Online (Sandbox Code Playgroud)

java dto mapstruct

7
推荐指数
1
解决办法
3510
查看次数

从多个源DTO映射到一个目标

使用MapStruct。举个例子:

class Dto {
    DtoA a;
    DtoB b;
}

class DtoA {
    Long id;
    //...
}

class DtoB {
    Long id;
    //...
}


class Entity {
    AB ab;
}
Run Code Online (Sandbox Code Playgroud)

如何映射DtoA,并DtoB以AB?

我试过了:

public abstract Entity toEntity(Dto dto);

@Mappings({
            @Mapping(source = "a", target = "ab.a"),
            @Mapping(source = "b", target = "ab.b")
)}
public abstract AB toABEntity(DtoA a, DtoB b);
Run Code Online (Sandbox Code Playgroud)

已经生成了toABEntity足够的代码*,但未调用该方法。

*很糟糕,因为它首先设置a,然后设置b会创建的新实例ab,因此a会丢失。

java mapstruct

7
推荐指数
1
解决办法
1257
查看次数