当前位置: 首页 > 知识库问答 >
问题:

映射对象需要对象字段的值映射

锺离飞飙
2023-03-14

我有一个对象A,我正试图映射到B。现在这个A有一个名为field1的枚举,其中包含一些值。我想使用@ValueMappings将它们映射到B中的其他枚举值。以下是我到目前为止的代码:

@Mapping(source = "field1", target = "field1", nullValuePropertyMappingStrategy = IGNORE)
@Mapping(source = "field2", target = "field2", nullValuePropertyMappingStrategy = IGNORE)
@ValueMappings({
    @ValueMapping(source = "field1.some1", target = "diff1"),
    @ValueMapping(source = "field1.some2", target = "diff1"),
    @ValueMapping(source = "field1.some3", target = "diff1"),
    @ValueMapping(source = "field1.some4", target = "diff2"),
})
B map(A a);

当我尝试编译它时,我得到了错误:

error: The following constants from the property "A.field1 field1" enum have no corresponding constant in the "B field1" enum and must be be mapped via adding additional mappings: diff1, diff2.

共有1个答案

穆洋
2023-03-14

解决这个问题的一种方法是这样做:

@Mapper(componentModel = "spring",  uses = {SomeUtil.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface Mapper {
    @Mapping(source = "field1", target = "field1", nullValuePropertyMappingStrategy = IGNORE)
    @Mapping(source = "field2", target = "field2", nullValuePropertyMappingStrategy = IGNORE)
    B map(A a);
}

在某些til.class:

@Mapper(componentModel = "spring")
public interface SomeUtil {

    @ValueMappings({
        @ValueMapping(source = "field1.some1", target = "diff1"),
        @ValueMapping(source = "field1.some2", target = "diff1"),
        @ValueMapping(source = "field1.some3", target = "diff1"),
        @ValueMapping(source = "field1.some4", target = "diff2"),
    })
    b.field1 map(a.field1 field);
}
 类似资料:
  • 我想使用Java流按对用户列表进行分组。 例如,我有。

  • 假设我有这样的映射: 现在,我需要将子列表映射到子列表,但它们都有相同的父对象。我希望这样做: 但不管用,有机会做吗?

  • 问题内容: 我有一个Java对象具有属性,等属性通过额外的间接水平可能访问:,,如果不公开。 挑战 :我想一个函数,一个对象,并返回一个,其中的键是字符串,等等和值对应的对象,。我想函数会被类似的东西调用 , 或(其中和是的属性的子集), 或如有必要。 我对Java的自省了解不多:如何在Java中做到这一点? 现在,对于我关心的每个对象类型,我都有一个专门的实现,这太样板了。 注意 :对于那些了解

  • 我正在使用Java11和ProjectReactor(来自Spring)。我需要对RESTAPI进行http调用(在整个流中只能进行一次)。对于响应,我需要计算两件事: 检查数据库(mongodb)中是否存在文档。如果它不存在,则创建并返回它。否则就退回吧 在伪代码中是这样的: 问题是calculateValue需要来自http的返回值。getData,但这已经在第一个flatMap上使用,但我们

  • 我有一个带有对象的RealmObject类,它实际上是PrimaryKey作为这个对象中的字符串。但不允许将对象作为主键。 因为目前不可能更改服务器的响应结构,所以我尝试了不同的方法来解决这个问题。但到目前为止,没有一个奏效。我在Android Studio中使用“io.realm:realm-gradle-plugin:0.87.2”作为和“realm-android”插件。 谢谢beeende

  • 问题内容: 我正在尝试设计一个非常简单的应用程序,并使自己与Hibernate的实体和值对象的定义(在Java Persistence with Hibernate的第4章中定义)有些困惑。 我所拥有的是带有客户的应用程序,可以下订单(一对多关系)。这些订单中的每一个都有许多订单行(也是一对多)。现在,我认为客户具有身份(客户编号),订单(订单编号)也是如此,因此它们是实体对象吗?我的困惑来自订单