我正在尝试映射一个具有一些JAXB元素(如@ XmlSeeAlso,@ XmlElement,@ XmlSchemaType)作为该类属性的bean。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Customer")
@XmlSeeAlso({PersonalCustomer.class, BusinessCustomer.class})
public class Customer extends Role {
@XmlElement(name = "AMLLineOfBusiness")
private LOB amlLineOfBusiness;
// 50 odd properties
//some properties with XmlElement/XmlSchemaType
// getters and setters
}
@Mapper
public interface CustomerMapper {
PersonalCustomer personcalCustomerToPersonalCustomer(PersonalCustomer pc);
@Mappings({
/*Several other ignore mappings*/
@Mapping(target="AMLLineOfBusiness",ignore=true)
})
Customer customerToCustomer(Customer customer);
}
现在,当使用mapStruct映射时,我面临以下问题。
Bean PersonalCustomer没有被映射。我没有在回复中看到它。但是在使用推土机时它可以完美地工作。我需要做的就是在dozer config xml中的映射中定义它。我在mapStruct中尝试过类似的事情。我在mapper界面中使用必需的映射定义了personcalCustomerToPersonalCustomer方法,并忽略了不需要的字段。虽然mapperImpl中有实现,但是我看不到它在impl类中的任何地方使用。
忽略具有@XmlElement或@XmlSchemaType的字段时,在生成impl代码时遇到编译错误。下面是错误statck跟踪。使用amlLineOfBusiness时出现编译错误。
[70,2]错误:结果类型com.role.Customer中的未知属性“ amlLineOfBusiness”。您是说“
lineOfBusiness”吗?[错误]-> [帮助1]
org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目服务上执行目标org.apache.maven.plugins:maven-
compiler-plugin:3.5.1:compile(默认编译) -jar:编译失败C:\ Perforce \ service-jar \
2018.08.0 \ service-jar \ src \ main \ java \ com \ mapstruct \ mapper \
CustomerMapper.java:[70,2]错误:未知属性“
amlLineOfBusiness”在结果中键入com.role.Customer。您是说“
lineOfBusiness”吗?在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)在org.apache.maven.lifecycle
.internal.MojoExecutor。
当我使用(@XmlElement(name =“ AMLLineOfBusiness”))批注的名称值忽略时,以上问题得以解决。我不明白这里到底发生了什么。
请注意,此处的源类型和目标类型都是相同的。我只需要根据要求映射某些字段。我被困在这里。非常感谢您的帮助。
看来您有3个不同的问题。
Customer
(或参见参考资料@XmlSeeAlso
)并使用所需的方法。这在MapStruct中是不可能自动实现的。有关现有功能请求,请参见 #131。getAM
,然后你@Mapping(target = "AMLLineOfBusiness", ignore = true)
1的可能解决方案是您自己身边的一个实例。
@Mapper
public interface CustomerMapper {
PersonalCustomer personcalCustomerToPersonalCustomer(PersonalCustomer pc);
default Customer customerToCustomer(Customer customer) {
if (customer instanceOf PersonalCustomer) {
return personalCustomerToPersonalCustomer((PersonalCustomer) pc);
} else if (customer instanceOf BusinessCustomer) {
return businessCustomerToBusinessCustomer((BusinessCustomer) pc);
}
}
}
发生这种情况的原因是MapStruct是注释处理器,因此它在编译期间生成了代码。另一方面,Dozer正在使用运行时信息。推土机可以在运行时获取类并选择正确的方法。MapStruct无法推断所有可能的实现。
我试图映射一个bean,其中包含一些JAXB元素,如@XmlSee同样、@XmlElement、@XmlschemaType作为该类的属性。 现在,我面临着下面的问题时,使用mapSTRt映射。 > bean个人客户没有被映射。我没有在响应中看到它。但是当使用dozer时,它工作得很好。我所需要做的就是在dozer配置xml中的映射中定义它。我在mapSTRt中尝试了类似的事情。我在mapper接
以下是我的上下文:我使用byteBuddy动态生成一个类,该类根据外部配置将一个对象转换为另一个对象。我遇到了一些问题,我想找到一个替代方案,这就是我发现MapStruct的方式。 因此,我试图构建简单的映射器,我想知道是否有可能自定义注释以添加转换函数。例如,我想要: 在mapper实现中,我会有如下内容: 如果有人能帮我做到这一点,我将不胜感激,这将节省我很多时间。 提前谢谢。
如何使用杰克逊序列化此类 Jackson没有拾取@XmlElementWrapper@XmlSee还有注释,Jackson也没有映射@XmlRootElement注释。我使用的是Jackson 1.9.0。Jackson正在将元素放入列表中,但没有映射POJO类的根元素。 这里是示例方法。 它生成的响应是'{“response”:{“status”:0,“PBBeans”:[{“user_name
我有以下映射器 我期望的是将使用映射列表中的每个条目。但是当我看到生成的代码时,我有以下内容 创建并使用新的映射器方法,而不是使用。 如何告诉使用。 注意:没有的情况下,一切都很正常。
我有许多带有JAXB注释的实体,我希望使用消息转换器将它们转换为JSON。 我知道我的ObjectMapper可以读取JAXB注释: 但是当我调用rest服务时,默认的注册MappingJacksonHttpMessageConverter(它不是为读取JAXB而配置的)似乎会接管--当忽略@XMLTransient时,由于循环引用而导致stackoverflow... 如何配置Spring来使用