Java 要在自定义映射中引用其他映射程序吗
我现在使用Mapstruct,希望创建一个映射,以便在映射之前,它需要验证给定坐标是否在有效区域内。如果无效,只返回默认值,如果有效,则返回该值 这就是我所拥有的Java 要在自定义映射中引用其他映射程序吗,java,mapstruct,Java,Mapstruct,我现在使用Mapstruct,希望创建一个映射,以便在映射之前,它需要验证给定坐标是否在有效区域内。如果无效,只返回默认值,如果有效,则返回该值 这就是我所拥有的 public class Business { ... Coordinate coordinate; } 问题是我不知道如何getCoordinateMapper()。一种方法是使用Mappers.getMapper(CoordinateMapper.class),但实际上我的CoordinateMapper必须引用其
public class Business {
...
Coordinate coordinate;
}
问题是我不知道如何getCoordinateMapper()
。一种方法是使用Mappers.getMapper(CoordinateMapper.class)
,但实际上我的CoordinateMapper必须引用其他映射器。使用Mappers.getMapper(CoordinateMapper.class)
会使引用的映射器为空,并导致NullPointerException
如何处理这个问题有什么建议吗?您使用componentModel“spring”,这意味着生成的类将是一个Springbean 您只需将其注入需要进行映射的服务中 否则,如果您不想注入它,那么您可能应该使用默认组件模型。在他们使用的文档中()
映射程序是无状态的。因此,我们有上下文对象来处理逻辑(如查找,但也有验证)。为了不破坏无状态的概念,可以通过@Context注释来传递它们 如果在方法顶部放置一个
@AfterMapping
,则MapStruct将选择该方法。通过将@mapping与ignore放在一起,确保MapStruct不进行映射
您可以向这个@Context注释类添加任何逻辑
公共类协调器{
@注入
私人协调人;
@后映射
public void validateAndMapToToTo(Business Business,@MappingTarget BusinessDTO目标){
if(有效(target.getCoordinate()){
返回getCoordinateMapper().toDTO(target.getCoordinate());
}
返回默认坐标
}
}
@映射(componentModel=“spring”)
公共接口BusinessMapper{
@映射(target=“坐标”,ignore=true)
BusinessDTO toDTO(businessbusiness,@Context-CoordinateValidator-validator);
}
public class BusinessDTO {
CoordinateDTO coordinate;
}
public class Coordinate {
double latitude;
double longitude;
}
public class CoordinateDTO {
double latitude;
double longitude;
}
@Mapping(componentModel = "spring", uses = CoordinateMapper.class)
public interface BusinessMapper {
BusinessDTO toDTO(Business business);
}
default CoordinateDTO getCoordinate(Coordinate coordinate) {
if (valid(coordinate)) {
return getCoordinateMapper().toDTO(coordinate);
}
return defaultCoordinate;
}
@Mapping(componentModel = "spring")
public interface CoordinateMapper {
CoordinateDTO toDTO(Coordinate coordinate);
}
CustomerMapper INSTANCE = Mappers.getMapper( CustomerMapper.class );