我试图映射一个bean,其中包含一些JAXB元素,如@XmlSee同样、@XmlElement、@XmlschemaType作为该类的属性。
@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);
}
现在,我面临着下面的问题时,使用mapSTRt映射。
>
bean个人客户没有被映射。我没有在响应中看到它。但是当使用dozer时,它工作得很好。我所需要做的就是在dozer配置xml中的映射中定义它。我在mapSTRt中尝试了类似的事情。我在mapper接口中定义了个人定制的方法,需要映射,忽略不需要的字段。虽然在mapperImpl中有实现,但是我没有看到它在impl类的任何地方被使用。
忽略@XmlElement或@XmlschemaType字段时,我在生成impl代码时遇到编译错误。下面是错误状态跟踪。当我使用amlLineOfBusiness时,我遇到了编译错误。
[70,2]错误:结果类型中的未知属性“amlLineOfBusiness”com.role.客户。你是说“lineOfBusiness”吗?[错误]-
当我使用(@xmlement(name=“AMLLineOfBusiness”))注释的名称值来忽略时,上述问题得到了解决。我不明白这里到底发生了什么。
默认情况下,mapStruct也映射超类的字段。在我的例子中,Customer类还获得了Role的属性。除了在每个属性上使用ignore=true之外,没有其他选项。这是一种忙碌,因为我有50多个领域和几十个类似的地图根据服务要求。我希望mapStruct有一个默认忽略所有字段的功能,或者有一个只映射指定字段的策略。
请注意,源类型和目标类型在这里是相同的。我只需要根据需求映射某些字段。我被困在这里了。我非常感谢你的帮助。
看起来你有三个不同的问题。
客户
的所有可能的实现(或参见@XmlSeeAnd
),并使用您需要的方法。这在MapSTRt中是不可能自动实现的。有关现有功能请求,请参见#131。@映射(目标="AMLLineOfBusiness",忽略=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无法推断所有可能的实现。
问题内容: 我正在尝试映射一个具有一些JAXB元素(如@ XmlSeeAlso,@ XmlElement,@ XmlSchemaType)作为该类属性的bean。 现在,当使用mapStruct映射时,我面临以下问题。 Bean PersonalCustomer没有被映射。我没有在回复中看到它。但是在使用推土机时它可以完美地工作。我需要做的就是在dozer config xml中的映射中定义它。我
问题内容: 我有一个类似的xml: 我想将元素映射到类MyBean中的属性 有什么办法可以做到吗?我正在使用JDK 1.6随附的jaxb 问题答案: 注意: 我是 EclipseLink JAXB(MOXy)的 负责人,并且是 JAXB(JSR-222) 专家组的成员。 使用任何JAXB(JSR-222)实现 使用任何JAXB(JSR-222)实现,您都可以使用来映射此用例。 ThetaValue
如何使用杰克逊序列化此类 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来使用
对于下面的Page对象示例类,我有一个accountsLink私有成员,它在加载时映射到登录页面上的非动态元素。当从构造函数调用initElements方法时,使用FindBy批注对其进行初始化。 现在问题来了。我有另一个元素(signInButton),它只在您单击accountsLink元素时才动态加载。此操作不会将您带到另一个页面,而只会打开一个ajax菜单,其中会出现登录按钮。 我的问题是