//Example test class
public class TestTarget {
public int myIntPrim;
public Integer myInteger;
public long myLongPrim;
public Long myLong;
public String myString;
public TestTarget otherTarget;
}
--------------------------------------------------
Following class causes the following errors:
Multiple markers at this line
- Ambiguous mapping methods found for mapping property "java.lang.Object myLong" to java.lang.Long: long mapLongPrim(java.lang.Object
- Ambiguous mapping methods found for mapping property "java.lang.Object myLongPrim" to long: int mapIntPrim(java.lang.Object prop), java.
lang.Integer mapInt(java.lang.Object prop), long mapLongPrim(java.lang.Object prop), java.lang.Long mapLong(java.lang.Object prop). See https:
- Ambiguous mapping methods found for mapping property "java.lang.Object myIntPrim" to int: int mapIntPrim(java.lang.Object prop), java.lang.
- Ambiguous mapping methods found for mapping property "java.lang.Object myInteger" to java.lang.Integer: int mapIntPrim(java.lang.Object
import java.util.Map;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
@Mapper
public interface TestTargetMapper {
void test(Map<String, Object> map, @MappingTarget TestTarget target);
default int mapIntPrim(Object prop) {
return prop == null ? 0 : ((Integer) prop).intValue();
}
default Integer mapInt(Object prop) {
return prop == null ? null : (Integer) prop;
}
default long mapLongPrim(Object prop) {
return prop == null ? 0 : ((Long) prop).longValue();
}
default Long mapLong(Object prop) {
return prop == null ? null : (Long) prop;
}
default String mapString(Object prop) {
return (String) prop;
}
default TestTarget mapTarget(Object targetRef) {
// lookup reference todo
return null;
}
}
-----------------------------------------------------------
Try to remove the primitive methods:
Ambiguous mapping methods found for mapping property "java.lang.Object myLongPrim" to long: java.lang.Integer mapInt(java.lang.Object prop), java.lang.Long
@Mapper
public interface TestTargetMapper {
void test(Map<String, Object> map, @MappingTarget TestTarget target);
default Integer mapInt(Object prop) {
return prop == null ? null : (Integer) prop;
}
default Long mapLong(Object prop) {
return prop == null ? null : (Long) prop;
}
default String mapString(Object prop) {
return (String) prop;
}
default TestTarget mapTarget(Object targetRef) {
// lookup reference todo
return null;
}
}
-----------------------------------------------------------
Remove the offending mapInt method:
Multiple markers at this line
- Ambiguous 2step methods found, mapping Object map to int. Found conversionY( methodX ( parameter ) ): conversionY: Long-->int, method
(s)X: java.lang.Long mapLong(java.lang.Object prop); conversionY: String-->int, method(s)X: java.lang.String mapString(java.lang.Object prop); .
- Can't map property "java.lang.Object myInteger" to "java.lang.Integer myInteger". Consider to declare/implement a mapping method: "java.lang.
Integer map(java.lang.Object value)".
- Can't map property "java.lang.Object myIntPrim" to "int myIntPrim". Consider to declare/implement a mapping method: "int map(java.lang.
Object value)".
- Ambiguous 2step methods found, mapping Object map to Integer. Found conversionY( methodX ( parameter ) ): conversionY: Long-->Integer,
method(s)X: java.lang.Long mapLong(java.lang.Object prop); conversionY: String-->Integer, method(s)X: java.lang.String mapString(java.lang.Object prop); .
@Mapper
public interface TestTargetMapper {
void test(Map<String, Object> map, @MappingTarget TestTarget target);
default Long mapLong(Object prop) {
return prop == null ? null : (Long) prop;
}
default String mapString(Object prop) {
return (String) prop;
}
default TestTarget mapTarget(Object targetRef) {
// lookup reference todo
return null;
}
}