Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要在自定义映射中引用其他映射程序吗_Java_Mapstruct - Fatal编程技术网

Java 要在自定义映射中引用其他映射程序吗

Java 要在自定义映射中引用其他映射程序吗,java,mapstruct,Java,Mapstruct,我现在使用Mapstruct,希望创建一个映射,以便在映射之前,它需要验证给定坐标是否在有效区域内。如果无效,只返回默认值,如果有效,则返回该值 这就是我所拥有的
 public class Business {
 ... Coordinate coordinate;
 } 问题是我不知道如何getCoordinateMapper()。一种方法是使用Mappers.getMapper(CoordinateMapper.class),但实际上我的CoordinateMapper必须引用其

我现在使用Mapstruct,希望创建一个映射,以便在映射之前,它需要验证给定坐标是否在有效区域内。如果无效,只返回默认值,如果有效,则返回该值

这就是我所拥有的


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 );