标签: modelmapper

将Kotlin数据对象映射到数据对象的更好方法

我想将一些"数据"类对象转换/映射到类似的"数据"类对象.例如,Web表单的类到数据库记录的类.

data class PersonForm(
    val firstName: String,
    val lastName: String,
    val age: Int,
    // maybe many fields exist here like address, card number, etc.
    val tel: String
)
// maps to ...
data class PersonRecord(
    val name: String, // "${firstName} ${lastName}"
    val age: Int, // copy of age
    // maybe many fields exist here like address, card number, etc.
    val tel: String // copy of tel
)
Run Code Online (Sandbox Code Playgroud)

我在Java中使用ModelMapper进行此类工作,但由于数据类是final(ModelMapper创建CGLib代理以读取映射定义),因此无法使用它.当我们打开这些类/字段时,我们可以使用ModelMapper,但是我们必须手动实现"data"类的功能.(参见ModelMapper示例:https://github.com/jhalterman/modelmapper/blob/master/examples/src/main/java/org/modelmapper/gettingstarted/GettingStartedExample.java)

如何在Kotlin中映射这样的"数据"对象?

更新: ModelMapper自动映射具有相同名称的字段(如tel - > tel),而不映射声明.我想用Kotlin的数据类来做.

更新: 每个类的目的取决于应用程序的类型,但这些应用程序可能位于应用程序的不同层. …

java modelmapper kotlin

50
推荐指数
4
解决办法
4万
查看次数

ModelMapper库是否支持ArrayList或HashSet等集合?

此问题与AutoMapper无关.我的问题是关于java中的ModelMapper,但是我无法为modelmapper创建新的标签作为我的小声誉.抱歉混淆.

无论如何,我的问题是modelmapper库是否支持arraylist或hashset等集合?它似乎不支持集合映射的集合.这是真的吗?

java modelmapper

28
推荐指数
4
解决办法
2万
查看次数

如何使用ModelMapper进行深度继承对象?

A.java

@Entity
@Getter
@Setter
@Inheritance
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, inclue=JsonTypeInfo.As.PROPERTY, property="type") 
@JsonSubTypes({
    @JsonSubTypes.Type(value=AA.class,name="aa"),
    @JsonSubTypes.Type(value=AB.class,name="ab"),
})
public abstract class A {
    @Id
    @GeneratedValue
    private Long id;

    //json ignore for getter
    @ManyToOne
    private A parent;

    @OneToMany(mappedBy="parent")
    private List<A> children;
}
Run Code Online (Sandbox Code Playgroud)

AA.java

@Entity
@Getter
@Setter
@DiscriminatorValue("aa")
public class AA extends A{
    private User user;
}
Run Code Online (Sandbox Code Playgroud)

AB.java

@Entity
@Getter
@Setter
@DiscriminatorValue("ab")
public class AB extends A {
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我将类的实例AB作为JSON 返回时,它看起来像这样:

{
     "id": 1,
     "type": "ab",
     "children": [...],
     "name": "ali"
}
Run Code Online (Sandbox Code Playgroud)

由于我想使用自定义User …

java dto modelmapper

15
推荐指数
1
解决办法
621
查看次数

如何在Java 8和ModelMapper中使用显式映射?

我通过官方文档http://modelmapper.org/getting-started/学习如何使用ModelMapper

有使用java 8进行显式映射的代码示例

modelMapper.addMappings(mapper -> {
  mapper.map(src -> src.getBillingAddress().getStreet(),
      Destination::setBillingStreet);
  mapper.map(src -> src.getBillingAddress().getCity(),
      Destination::setBillingCity);
});
Run Code Online (Sandbox Code Playgroud)

如何正确使用此代码?当我在IDE中键入此代码段时,IDE会显示消息"无法解析方法映射" 在此输入图像描述

java java-8 modelmapper

13
推荐指数
1
解决办法
8474
查看次数

jackson objectMapper 与其他人的区别

我找不到任何关于 jackson 的 ObjectMapper 与其他映射器(如 dozer/mapStruct/modelMapping/等)之间差异的解释。所有的文章都比较了 dozer/mapStruct/modelMapping 但他们忽略了 ObjectMapper。我不明白有什么问题?是同一个映射器吗?

jackson mapper modelmapper mapstruct objectmapper

10
推荐指数
2
解决办法
3204
查看次数

如何使用modelMapper转换嵌套类

我有一个简单的类,我想使用modelMapper映射到DTO类.

class Source {

    private String name;
    private String address;
    List<Thing> things;

    // getters and setters follows
    }

    class Thing {

    private String thingCode;
    private String thingDescription;

    // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我想将这些转换为包含ThingDTO列表的sourceDTO

class sourceDTO {

    private String name;
    private String address;
    List<ThingDTO> things;

    // getters and setters.
    }

     class ThingDTO {

    private String thingCode;
    private String thingDescription;

    // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

如果我删除我的物品列表和ThingsDTO列表,那么modelmapper是一个令人愉快的使用,

 modelMapper.map(source, SourceDTO.class);
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何让映射器将事物列表转换为ThingDTO列表.从文档中,我认为我需要创建一个扩展PropertyMap的mapper类,但我无法弄清楚如何配置它.

欢迎提供相关文档的任何指示

java modelmapper

9
推荐指数
1
解决办法
9404
查看次数

ModelMapper:选择基于Child类的映射

TL; DR

我希望以一种从AbstractParent映射到AbstractParentDTO的方式使用modelMapper,稍后在ModelMapper-Config中调用每个Sub-class的特定映射器,然后跳过其余的(abstrac-class)映射.

怎么可能?这是正确的方法吗?有设计缺陷吗?


是)我有的:

父实体:

@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type")
public abstract class Parent {
//some more fields
}
Run Code Online (Sandbox Code Playgroud)

一个子实体:

//Basic Lombok Annotations
@DiscriminatorValue("child_a")
public class ChildA extends Parent {
//some more fields
}
Run Code Online (Sandbox Code Playgroud)

另一个子实体:

@DiscriminatorValue("child_b")
public class ChildB extends Parent {
//some more fields   
}
Run Code Online (Sandbox Code Playgroud)

然后我有父DTO类:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value = ChildA.class, name = "child_a"),
@JsonSubTypes.Type(value = ChildB.class, name = "child_b"),
public abstract class ParentDTO {
//some more fields
}
Run Code Online (Sandbox Code Playgroud)

一个孩子DTO:

public class ClassADTO extends ParentDTO …
Run Code Online (Sandbox Code Playgroud)

java spring modelmapper spring-boot

9
推荐指数
2
解决办法
2684
查看次数

ModelMapper:运行时映射抽象类

我使用 ModelMapper Framework ( http://modelmapper.org/ ) 在 Java 中映射对象。我在映射包含抽象类的具体类(DTO 到实体)时遇到了问题。

示例:任务有一个 AbstractItems 列表。
AbstractItems 是问题和标准。

public class TaskDTO {
   ...
   private List<AbstractItemDTO> items;
}
Run Code Online (Sandbox Code Playgroud)

映射方法:

// task is an TaskDTO object
return getModelMapper().map(task, TaskEntity.class);
Run Code Online (Sandbox Code Playgroud)

ModelMapper 尝试创建 AbstractItem 的新实例,该实例引发异常。有没有办法在运行时映射抽象类?
喜欢 QuestionDTO -> Question, CriteriaDTO -> Criteria

java object-object-mapping modelmapper

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

如何自定义ModelMapper

我想使用ModelMapper将实体转换为DTO并返回.它主要是有效的,但我如何自定义它.它有很多选择,很难弄清楚从哪里开始.什么是最佳做法?

我将在下面自己回答,但如果另一个答案更好,我会接受它.

java rest modelmapper

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

ModelMapper - 无法将 org.hibernate.collection.internal.PersistentBag 转换为 java.util.ArrayList

ModelMapper 配置应该是什么样的?

编译组:'org.modelmapper',名称:'modelmapper',版本:'2.3.8'

目前我有:

 modelMapper = new ModelMapper();
            modelMapper.getConfiguration()
                    .setMatchingStrategy(MatchingStrategies.STANDARD)
                    .setFieldMatchingEnabled(true)
                    .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE);
Run Code Online (Sandbox Code Playgroud)

我的实体有

@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Phones> phones = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我的第二个实体:

@ManyToOne
@JoinColumn(name = "employee_id")
private Employee employee;
Run Code Online (Sandbox Code Playgroud)

我想要的 DTO:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class EmployeeDTO {

@Singular
private final List<PhoneDTO> phones;

}
Run Code Online (Sandbox Code Playgroud)

我用这种方式映射:

        EmployeeDTO.EmployeeDTOBuilder employeeDTOBuilder 
= ObjectMapperUtils.map(employee, EmployeeDTO.employeeDTOBuilder.class);
Run Code Online (Sandbox Code Playgroud)

我越来越:

  1. 转换器 org.modelmapper.internal.converter.MergingCollectionConverter@969b4391 无法将 org.hibernate.collection.internal.PersistentBag 转换为 java.util.ArrayList。

java hibernate modelmapper

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