gpt4 book ai didi

java - Dozer 映射字段类型 ="one-way"未按预期工作

转载 作者:行者123 更新时间:2023-12-01 18:56:37 26 4
gpt4 key购买 nike

根据 Dozer 文档,仅当“a”对象映射到“b”对象时,才会映射单向字段。如果“b”映射到“a”,则该字段不会映射。

但是对于下面的代码,“b”仍然映射到“a”。

 <mapping >
<class-a>com.examples.source.Source</class-a>
<class-b>com.examples.destination.Destination</class-b>
<field type="one-way">
<a set-method="setIRCCode" get-method="getIRCCode">ircCode</a>
<b set-method="setIrcCode" get-method="getIrcCode">ircCode</b>
</field>
</mapping>

package com.examples.source;
public class Source {
protected String ircCode;

public String getIRCCode() {
return ircCode;
}
public void setIRCCode(String value) {
this.ircCode = value;
}
}

package com.examples.destination;
public class Destination {
private String ircCode;
public String getIrcCode() {
return this.ircCode;
}
public void setIrcCode(String ircCode) {
this.ircCode = ircCode;
}
}

public class Mapping {
public static void main(String[] args) {
DozerBeanMapper mapper = new DozerBeanMapper(Arrays.asList(new String[]{"Dozer-Mapping.xml"}));
Destination destinationObj=new Destination();
destinationObj.setIrcCode("B");
Source srcObj= mapper.map(destinationObj, Source.class);
System.out.println("Reverse Mapping IRCCode= "+ srcObj.getIRCCode());
}
}

运行上述代码时的输出:

Reverse Mapping IRCCode= B **(Unexpected and Wrong Result)**

预期结果是:

Reverse Mapping IRCCode= null

我使用的是Dozer 5.4.0版本。

最佳答案

我使用 Dozer 5.5.1 尝试了与您的帖子类似的以下代码,它提供的预期结果为 null

代码:

public class A {

private String aName;
private String aPlace;
/**
* @return the aName
*/
public String getaName() {
return aName;
}
/**
* @param aName the aName to set
*/
public void setaName(String aName) {
this.aName = aName;
}
/**
* @return the aPlace
*/
public String getaPlace() {
return aPlace;
}
/**
* @param aPlace the aPlace to set
*/
public void setaPlace(String aPlace) {
this.aPlace = aPlace;
}

}

public class B {
private String bName;
private String bPlace;
/**
* @return the bName
*/
public String getbName() {
return bName;
}
/**
* @param bName the bName to set
*/
public void setbName(String bName) {
this.bName = bName;
}
/**
* @return the bPlace
*/
public String getbPlace() {
return bPlace;
}
/**
* @param bPlace the bPlace to set
*/
public void setbPlace(String bPlace) {
this.bPlace = bPlace;
}
}

推土机映射:

  <mapping> 
<class-a>com.test.A</class-a>
<class-b>com.test.B</class-b>
<field type="one-way">
<a>aName</a>
<b>bName</b>
</field>
</mapping>

测试:

public static void main(String[] arg){
List<String> myMappingFiles = new ArrayList<String>(1);
myMappingFiles.add("dozer-mapping.xml");

DozerBeanMapper mapper = new DozerBeanMapper();
mapper.setMappingFiles(myMappingFiles);
B obj=new B();
obj.setbName("Test");
A destObject =
mapper.map(obj, A.class);
System.out.println("B="+destObject.getaName());
}

输出:

<小时/>
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
B=null

关于java - Dozer 映射字段类型 ="one-way"未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26863362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com