标签: modelmapper

Jooq Result的自定义转换器

实际上我们正在使用fetchInto()将结果转换为对象列表.

例如:

Employee pojo匹配数据库表是员工.

List<Employee> employeeList = sql.select(Tables.Employee)
                                 .from(Tables.EMPLOYEE).fetchInto(Employee.class);
Run Code Online (Sandbox Code Playgroud)

同样,我们如何转换我们使用连接获取的记录?

例如:

Customerpojo匹配数据库表是customer.

Employeepojo匹配数据库表是employee.

sql.select(<<IWantAllFields>>).from(Tables.CUSTOMER)
                              .join(Tables.EMPLOYEE)
                              .on(Tables.EMPLOYEE.ID.equal(Tables.CUSTOMER.EMPLOYEE_ID))
                              .fetchInto(?);
Run Code Online (Sandbox Code Playgroud)

java sql type-conversion jooq modelmapper

5
推荐指数
1
解决办法
3863
查看次数

如何从Map映射到List

我正在开发一个项目,我需要从层次结构Map<String, Object>中映射,其中第二个参数应该是a StringMap<String, Object>.到目前为止,ModelMapper工作得很棒,但我遇到了特定转换的问题.鉴于以下内容,其中Model只是一个标记界面:

class Client implements Model {
    String firstName;
    String lastName;
    List<Organization> organizations = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

假设Organization实现了我的标记界面,Model但是任意结构,我希望能够将以下内容映射到Client:

Map source = new HashMap(){{
    put("firstName", "John"),
    put("lastName", "Smith"),
    put("organizations", new HashMap(){{
        put("0", new HashMap(){{
            put("id", "1234");
        }});
        put("abc", new HashMap(){{
            put("id", "5678");
        }});
    }});
}};
Run Code Online (Sandbox Code Playgroud)

总结:在推入组织属性时,我如何让ModelMapper删除映射键并仅使用值列表?如果做不到这一点,组织的财产就会变空.你可能认为我有充分的理由希望这样做,而且是一个糟糕的例子!

提前感谢您的意见!

编辑

我试图建立一个Converter将管理从转换MapCollection<Model>无果.鉴于:

new Converter<Map, Collection<DataTransportObject>>() {
    @Override
    public Set convert(MappingContext<Map, Collection<DataTransportObject>> context) { …
Run Code Online (Sandbox Code Playgroud)

java modelmapper

5
推荐指数
1
解决办法
1488
查看次数

ModelMapper会混淆不同的属性

我有一个Student对象扩展Person对象.

public abstract class Person implements IIdentifiable {
    private String contactNumber;
    // other properties
    public String getContactNumber() {
        return contactNumber;
    }

    public void setContactNumber(String contactNumber) {
        this.contactNumber = contactNumber;
    }
}

public class Student extends Person {
    private String studentNumber;
    //Other properties
    public String getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }
}
Run Code Online (Sandbox Code Playgroud)

学生有财产studentNumber,人有财产contactNumber.当我将Student对象映射到StudentDto它时,会对给定的属性感到困惑.

public class StudentDto{
    private String studentNumber;
    public String getStudentNumber() { …
Run Code Online (Sandbox Code Playgroud)

java modelmapper

5
推荐指数
2
解决办法
2395
查看次数

Modelmapper将从String转换为LocalDate

我的DTO具有String格式的日期字段.我的实体的日期为LocalDate.目前我正在从地图中跳过它,然后手动显式设置它(String to Date,反之亦然).

可以自动转换吗?我在Spring bean中尝试了Converter但是它给了我很多编译错误(类型转换器不接受参数,不会覆盖转换方法 - 转换()也有很多错误).

@Bean
public ModelMapper studentModelMapper() {
....    
    Converter<String, LocalDate> toStringDate = new AbstractConverter<String, LocalDate>() {
        protected String convert(String source) {
            return source == null ? null : new LocalDate(source);
        }
    };
....
}
Run Code Online (Sandbox Code Playgroud)

我对modelmapper不太熟悉.任何帮助是极大的赞赏.

正如建议我尝试使用LocalDate for DTO,但问题是当我在前面发送此实体(REST调用)时,我得到了JSON.

"dateOfBirth": {
   "year": 1972,
   "month": "JANUARY",
   "monthValue": 1,
   "dayOfMonth": 4,
   "dayOfWeek": "TUESDAY",
   "era": "CE",
   "dayOfYear": 4,
   "leapYear": true,
   "chronology": {
      "id": "ISO",
      "calendarType": "iso8601"
   }
}
Run Code Online (Sandbox Code Playgroud)

我的前端开发人员需要"YYYY-MM-DD".

spring modelmapper

5
推荐指数
1
解决办法
6442
查看次数

ModelMapper - 无法实例化目标实例

我正在使用 mongodb,所以我将实体与创建 DTO(使用休眠验证器注释)的表示层分离。

public abstract class UserDTO {

    private String id;      
    @NotNull
    protected String firstName;
    @NotNull
    protected String lastName;
    protected UserType type;
    protected ContactInfoDTO contact;
    protected List<ResumeDTO> resumes;

    public UserDTO(){}
    //...
Run Code Online (Sandbox Code Playgroud)

我正在尝试从 db 这个具体的类中检索

public class UserType1DTO extends UserDTO {

    private CompanyDTO company;

    public UserType1DTO(){
        super();
    }

    public UserType1DTO(String firstName, String lastName, ContactInfoDTO contact, CompanyDTO company) {
        super(UserType.type1, firstName, lastName, contact);
        this.company = company;
    }
    /...
Run Code Online (Sandbox Code Playgroud)

像这样:

return mapper.map((UserType1) entity,UserType1DTO.class);
Run Code Online (Sandbox Code Playgroud)

我收到关于无法实例化的错误 ResumeDTO

Failed to instantiate instance of destination *.dto.ResumeDTO. Ensure …
Run Code Online (Sandbox Code Playgroud)

java mongodb modelmapper

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

如何使用ModelMapper将多个字段映射到一个目标字段

如何将多个字段映射/合并到一个字段中?就像连接一firstnamelastname到目的地fullname

public class ModelMapperConfigTest {

    @Test
    public void should_validate() {
        new ModelMapperConfig().modelMapper().validate();
    }

    @Data
    public static class Person {
        private String firstname;
        private String lastname;
    }

    @Data
    public static class PersonDto {
        private String firstname;
        private String lastname;
        private String fullname;
    }

    // Test data

    @Test
    public void should_map_multiple_fields_into_one() {

        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

        // TODO: Configure modelmapper to merge the two fields

        // test that all fields are mapped
        modelMapper.validate();

        // …
Run Code Online (Sandbox Code Playgroud)

java modelmapper

5
推荐指数
1
解决办法
2989
查看次数

ModelMapper,将实体列表映射到DTO对象列表

我正在使用Spring MVC框架编写简单的博客Web应用程序。我愿意DTO在我的应用程序中添加图层。

我决定使用ModelMapper框架从Entity对象转换为DTO视图中使用的对象。

我只有一个问题。在我的主页上,我正在显示博客中的帖子列表。在我看来,这只是Post(实体)对象的列表。我想更改它以将PostDTO对象列表传递给我的视图。有没有什么办法来映射ListPost对象ListPostDTO单方法调用的对象?我当时正在考虑编写将转换该转换器的转换器,但是我不确定这是否是一个好方法。

另外,我还在其他几个地方使用ListsEntities例如管理面板或页面上每个帖子下方的评论。

链接到GitHub存储上我的应用程序的代码:存储库

java modelmapper

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

Modelmapper:将列表中的元素映射到 POJO 中的字段

public class SimpleDTO{
    private String firstElement;
    private String lastElement;
}

public class ComplexSource{
    private List<String> elementList;
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用映射它,map().setFirstElement(source.getElementList().get(0))但收到错误消息“1) 无效的源方法 java.util.List.get()。确保该方法有零个参数并且不返回 void。”

如何使用 ModelMapper 或任何其他替代方案将列表中的元素映射到 Pojo 中的字段?

java mapping dto modelmapper

4
推荐指数
1
解决办法
7778
查看次数

从 ModelMapper 升级到 MapStruct 好不好?

目前我们在我们的项目中使用 ModelMapper。然而,在该站点中,我看到 MapStruct 有很多人喜欢。

不确定差异以及我们是否真的需要升级。

ModelMapper 和 MapStruct 之间有什么区别?

谢谢。

modelmapper mapstruct

4
推荐指数
1
解决办法
1653
查看次数

如何使用 ASM 读取 Java 类方法注释值

如何在运行时使用ASM读取 Java 方法注释的值?
注释只有一个CLASS RetentionPolicy,因此不可能使用反射来做到这一点。

| 策略CLASS:注释将由编译器记录在类文件中,但不需要在运行时由VM保留

示例:我想在运行时从字段中
提取值:Carly Rae Jepsenartist

public class SampleClass {

    @MyAnnotation(artist = "Carly Rae Jepsen")
    public void callMeMaybe(){}
}
Run Code Online (Sandbox Code Playgroud)
@Documented
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface MyAnnotation {

    String artist() default "";
}
Run Code Online (Sandbox Code Playgroud)

但为什么?
难道你不能只改变RetentionPolicytoRUNTIME并用反射来做吗?
简而言之:不。我使用modelmapper框架(简单、智能、对象映射)。在那里,我通过带注释的方法指定了 Java 类之间的双向映射。我不想重用此分层映射信息来进行更改事件传播。但提供的mapstruct org.mapstruct.Mapping注解有CLASS RetentionPolicy. 这就是为什么我需要从类文件中读取该信息 - 并且需要ASM

java reflection annotations java-bytecode-asm modelmapper

4
推荐指数
1
解决办法
1889
查看次数