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

推土机场-排除私有财产的单向给出错误

仲孙夕
2023-03-14

与标题一样,我试图映射2个类,但其中一个类具有带有私有setter的私有属性。

public Class A {
 private String propertyA;
 private String propertyB;

 ClassA (){
 }
 public String getPropertyA() {
    return propertyA;
 }

 public void setPropertyA(String propertyA) {
    this.propertyA= propertyA;
 }
 public String getPropertyB() {
    return propertyB;
 }

 public void setPropertyB(String propertyB) {
    this.propertyB= propertyB;
 }
} 


public Class B {
 private String propertyA;
 private String propertyB;

 ClassB (String propertyB){
   propertyB = propertyB;
 }
 public String getPropertyA() {
    return propertyA;
 }

 public void setPropertyA(String propertyA) {
    this.propertyA= propertyA;
 }
 public String getPropertyB() {
    return propertyB;
 }

 void setPropertyB(String propertyB) {
    this.propertyB= propertyB;
 }
} 

我想将对象从类A映射到类B,反之亦然,唯一的区别是,在从类A映射到类B的过程中不需要设置propertyB。我尝试了以下配置:

 <mapping>
  <class-a map-null="false">classA</class-a>
  <class-b>classB</class-b>
  <field>
       <a get-method="getPropertyA" set-method="setPropertyA">propertyA</a>
 <b get-method="getPropertyA" set-method="setPropertyA">propertyA</b>
  </field>
  <field-exclude type="one-way">
       <a get-method="getPropertyB" set-method="setPropertyB">propertyB</a>
       <b get-method="getPropertyB">propertyB</b>
  </field-exclude>
</mapping>

这给了我一个例外:类类B的属性属性B不能被写入。这是我对私有属性的意图,但无论我做什么,异常都会保留。我尝试添加一个类型为=“单向”的字段映射,但这给了我同样的异常。有没有办法用Dozer做到这一点?

共有1个答案

卫成和
2023-03-14

我认为您正在寻找的是将is-access="true"添加到您对class B属性B的定义中。这通知Dozer它应该直接访问属性,而不是通过getter或setter。

如果所有getter和setter都遵循bean标准,则不必指定它们。此外,如果一个字段与bean标准双向映射,则根本不必指定它。这意味着您的XML应该能够看起来像这样:

<mapping>
  <class-a map-null="false">classA</class-a>
  <class-b>classB</class-b>
  <field-exclude type="one-way">
       <a>propertyB</a>
       <b is-accessible="true">propertyB</b>
  </field-exclude>
</mapping>
 类似资料:
  • 我试图使用Dozer映射UUID字段,遇到了Dozer github上提到的一个问题: https://github.com/DozerMapper/dozer/issues/83 问题是-显然,Dozer依赖于UUID中不存在的默认无参数构造函数。因此,该链接显示了如何告知推土机执行参考复制。然而,使用该提示并没有帮助,我仍然会遇到以下异常: org.dozer.java.lang.java.u

  • 我有四门课: 从我在dozer留档中读到的关于继承的内容来看,它必须非常简单,我需要将超级类相互映射,以及子类。以下是它在xml中的外观: 所有这些类都是相同的,我的意思是D和D具有相同的属性,C和C等等。 问题:在我传递给dozer的对象中,我有一个类型为B的属性,它可以由C或D(多态性)初始化。当dozer返回新的映射对象时,它总是将属性类型B返回给我,而不是C或D。如何解决这个问题?

  • 我在Spring启动时使用推土机映射器。如果我将数据从实体映射到EntityDTO,那么dozer maper的工作就是将数据从实体类复制到EntityDTO,对于原语也是如此。但是假设我有这样一门课 和名称为EntityDTO的DTO 那么它不会将数据从entityChild映射到EntityChildTos,有人能帮我解决这个问题吗?

  • 我是使用dozer的新手。我需要将集合映射到一个类,该类是集合中源类的属性。我有如下类技术 我想映射到 哪里 我的推土机绘图将是什么样子?

  • 问题内容: 我正在寻找Python中的地球移动器的距离(或快速EMD)实现。关于在哪里找到它的任何线索,我在网上已经看够了。我想在我正在做的图像检索项目中使用它。谢谢。 编辑:我发现了使用纸浆库的一个非常好的解决方案。该页面还包含设置所需的说明。 问题答案: OpenCv for Python中有一个出色的实现。该函数的名称为CalcEMD2,用于比较两个图像直方图的简单代码如下所示: 我使用Py

  • 在Dozer中,我们能够在字段映射期间在提示中提到接口。我们如何在MapStruct中实现同样的功能呢? 我不能把确切的代码放在这里。但是,它与下面类似。这里有一个域类示例: 其中,B是一个抽象类。C是一个包含我们必须映射的列表项的类。 DTO侧的类和接口结构也类似。所以,在Dozer中的映射如下所示: 在MapStruct中,我们如何引用Dozer中的提示中给出的接口? 场景:我们有: 在那里,