Dozer를 사용하여 기본 클래스에서 서로 자동으로 매핑하려고합니다. 결국 코드는 결국 이렇게 될 수 있습니다. 빈에서, 직접적 Boolean
매핑을 보인다 다음과 같은 예외를 생성 할 때 도저가 Boolean
에 지원 매핑 String
을 수행하는 동안Dozer를 사용하여 원시 클래스 (문자열, 부울 등)를 서로 매핑합니다.
Boolean resultBoolean = mapper.map("true", Boolean.class);
.
org.dozer.MappingException: java.lang.NoSuchMethodException: java.lang.Boolean.<init>()
at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:88)
at org.dozer.factory.ConstructionStrategies$ByConstructor.newInstance(ConstructionStrategies.java:261)
at org.dozer.factory.ConstructionStrategies$ByConstructor.create(ConstructionStrategies.java:245)
at org.dozer.factory.DestBeanCreator.create(DestBeanCreator.java:65)
at org.dozer.MappingProcessor.map(MappingProcessor.java:178)
at org.dozer.MappingProcessor.map(MappingProcessor.java:125)
at org.dozer.MappingProcessor.map(MappingProcessor.java:120)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:111)
...
Caused by: java.lang.NoSuchMethodException: java.lang.Boolean.<init>()
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.dozer.factory.ConstructionStrategies$ByConstructor.newInstance(ConstructionStrategies.java:257)
... 32 more
Dozer가 부울을 인스턴스화하려고 시도하는 것은 분명합니다. 부울을 String으로 변환하는 고객 DozerConverter
을 만들 수 있지만 Dozer가 이미 가지고있는 코드를 다시 구현하고 싶지는 않습니다. Dozer가 기본 유형과 직접 맵핑하도록 할 수있는 방법이 있습니까?
import org.dozer.converters.DateFormatContainer;
import org.dozer.converters.PrimitiveOrWrapperConverter;
public class DozerPrimitiveMapping {
public static void main(String[] args) {
PrimitiveOrWrapperConverter primitiveConverter = new PrimitiveOrWrapperConverter();
//DateFormatContainer is not needed in this String-to-Boolean use case, but the converter would throw an error if it was null
DateFormatContainer dateFormatContainer = new DateFormatContainer("");
Boolean booleanResult= (Boolean) primitiveConverter.convert("true", Boolean.class, dateFormatContainer);
System.out.println("Boolean result from dozer: "+booleanResult);
}
}
또는 사용자 정의 변환에 모두 마무리 :