diff --git a/src/main/java/io/beanmapper/core/converter/impl/AnyToEnumConverter.java b/src/main/java/io/beanmapper/core/converter/impl/AnyToEnumConverter.java index 79891cf2..40ba43fd 100644 --- a/src/main/java/io/beanmapper/core/converter/impl/AnyToEnumConverter.java +++ b/src/main/java/io/beanmapper/core/converter/impl/AnyToEnumConverter.java @@ -22,6 +22,9 @@ protected Enum doConvert(Object source, Class> targetClass) if (source == null) { return null; } + if (targetClass.isInstance(source)) { + return (Enum)source; + } String sourceText = source.toString(); if (isNotEmpty(sourceText)) { return valueOf(targetClass, sourceText); diff --git a/src/test/java/io/beanmapper/BeanMapperTest.java b/src/test/java/io/beanmapper/BeanMapperTest.java index 221c29b3..bbb17d32 100644 --- a/src/test/java/io/beanmapper/BeanMapperTest.java +++ b/src/test/java/io/beanmapper/BeanMapperTest.java @@ -113,14 +113,7 @@ import io.beanmapper.testmodel.encapsulate.source_annotated.Car; import io.beanmapper.testmodel.encapsulate.source_annotated.CarDriver; import io.beanmapper.testmodel.encapsulate.source_annotated.Driver; -import io.beanmapper.testmodel.enums.ColorEntity; -import io.beanmapper.testmodel.enums.ColorResult; -import io.beanmapper.testmodel.enums.ColorStringResult; -import io.beanmapper.testmodel.enums.EnumSourceArraysAsList; -import io.beanmapper.testmodel.enums.EnumTargetList; -import io.beanmapper.testmodel.enums.RGB; -import io.beanmapper.testmodel.enums.UserRole; -import io.beanmapper.testmodel.enums.UserRoleResult; +import io.beanmapper.testmodel.enums.*; import io.beanmapper.testmodel.ignore.IgnoreSource; import io.beanmapper.testmodel.ignore.IgnoreTarget; import io.beanmapper.testmodel.initially_unmatched_source.SourceWithUnmatchedField; @@ -1626,6 +1619,14 @@ public void deepMapEnumInHolder() { assertEquals(CountryEnum.NL.getImage(), target.country.image); } + @Test + public void mapEnumWithToString() { + SourceWithEnumWithToString source = new SourceWithEnumWithToString(); + source.myEnum = EnumWithToString.SOME_VALUE; + TargetWithEnumWithToString target = beanMapper.map(source, TargetWithEnumWithToString.class); + assertEquals(EnumWithToString.SOME_VALUE, target.myEnum); + } + public Person createPerson(String name) { Person person = new Person(); person.setId(1984L); diff --git a/src/test/java/io/beanmapper/testmodel/enums/EnumWithToString.java b/src/test/java/io/beanmapper/testmodel/enums/EnumWithToString.java new file mode 100644 index 00000000..ba5c3105 --- /dev/null +++ b/src/test/java/io/beanmapper/testmodel/enums/EnumWithToString.java @@ -0,0 +1,9 @@ +package io.beanmapper.testmodel.enums; + +public enum EnumWithToString { + SOME_VALUE; + + public String toString() { + return "X" + name() + "X"; + } +} diff --git a/src/test/java/io/beanmapper/testmodel/enums/SourceWithEnumWithToString.java b/src/test/java/io/beanmapper/testmodel/enums/SourceWithEnumWithToString.java new file mode 100644 index 00000000..fd74a037 --- /dev/null +++ b/src/test/java/io/beanmapper/testmodel/enums/SourceWithEnumWithToString.java @@ -0,0 +1,5 @@ +package io.beanmapper.testmodel.enums; + +public class SourceWithEnumWithToString { + public EnumWithToString myEnum; +} diff --git a/src/test/java/io/beanmapper/testmodel/enums/TargetWithEnumWithToString.java b/src/test/java/io/beanmapper/testmodel/enums/TargetWithEnumWithToString.java new file mode 100644 index 00000000..9905deeb --- /dev/null +++ b/src/test/java/io/beanmapper/testmodel/enums/TargetWithEnumWithToString.java @@ -0,0 +1,5 @@ +package io.beanmapper.testmodel.enums; + +public class TargetWithEnumWithToString { + public EnumWithToString myEnum; +}