最基本的如何使用、引包、基础的注解和属性就不介绍了
HospitalInfoConverter
@Mapper(componentModel = "spring")
@DecoratedWith(HospitalInfoConverterPost.class)
public interface HospitalInfoConverter {
@Mapping(target = "id", source = "hosId")
@Mapping(target = "name", source = "hosName")
@Mapping(target = "addr", source = "address")
@Mapping(target = ".", source = "cityName")
@Mapping(target = ".", source = "district")
@Mapping(target = ".", source = "level")
@Mapping(target = ".", source = "latitude")
@Mapping(target = ".", source = "longitude")
@BeanMapping(ignoreUnmappedSourceProperties = { "hosArea" })
OrgInfoDto hosToOrgInfoDto(HospitalResult hospitalResult);
}
HospitalInfoConverterPost (必须是抽象类 abstract )
@Slf4j
public abstract class HospitalInfoConverterPost implements HospitalInfoConverter {
@Autowired
@Qualifier("delegate")
private HospitalInfoConverter delegate;
@Override
public OrgInfoDto hosToOrgInfoDto(HospitalResult hospitalResult) {
log.info("hosToOrgInfoDto");
OrgInfoDto orgInfoDto = delegate.hosToOrgInfoDto(hospitalResult);
orgInfoDto.setId(orgInfoDto.getId() + SPLIT + hospitalResult.getHosArea());
return orgInfoDto;
}
}
属性ignoreUnmappedSourceProperties的使用,在上面的HospitalInfoConverter 转换器中有这个注解属性的使用,此属性就是忽略源类中的属性值,不去进行映射
此属性就是当前映射关系使用自定的方法去转换,是方法,与自定义实现类是有区别的
TimeChangeWorker
@Component
@RequiredArgsConstructor
public class TimeChangeWorker {
@Named("timeChange")
public String timeChange(String time) {
return time.replaceAll("~", "-");
}
}
PeriodConverter 转换器
注意: Mapper中要增加属性uses ,将自定义的类引入使用
qualifiedByName 属性引入 @Named中的别名
@Mapper(componentModel = "spring", uses = { TimeChangeWorker.class })
public interface PeriodConverter {
@Mapping(target = "time", source = "time", qualifiedByName = "timeChange")
Period sourceToPer(SourceDto dto);
List<Period> sourcesToPeriods(List<SourceDto> sourceDtos);
}
执行表达式,可以是执行一个方法
expression = “java( xxxxx类路径.方法名(参数(源类的属性),参数(源类的属性)))”)
OrderInfoConverter转换器
@Mapper(componentModel = "spring", uses = { OrderInfoWorker.class })
//@DecoratedWith(value = OrderInfoConverterPost.class)
public interface OrderInfoConverter {
@Mapping(target = "smallPicture", source = "smallPicture", qualifiedByName = "imageUrl")
@Mapping(target = "orderPrice", ignore = true)
@Mapping(target = "orderCountPrice", ignore = true)
@Mapping(target = "orgId", expression = "java( com.shunnengnet.tijian.openapi.converter.conversionWorker.OrderInfoWorker.jsonToOrg(dto.getThirdPartyApply(),dto.getOrgId()))")
@Mapping(target = "orgName", expression = "java( com.shunnengnet.tijian.openapi.converter.conversionWorker.OrderInfoWorker.jsonToOrg(dto.getThirdPartyApply(),dto.getOrgName()))")
OrderInfoResult dtoToEntity(OrderInfoResultDto dto);
default List<OrderInfoResult> dtoListToEntityList(List<OrderInfoResultDto> dto) {
List<OrderInfoResult> orderInfoResults = new ArrayList<>();
dto.forEach(item -> {
orderInfoResults.add(dtoToEntity(item));
});
return orderInfoResults;
}
}
OrderInfoWorker
@Component
@Slf4j
public class OrderInfoWorker {
@Named(value = "imageUrl")
public String image(String url) {
return ConfigConstant.IMAGE_URL_PREFIX + url;
}
public static String jsonToOrg(String jsonStr, String key) {
JSONObject jsonObject = JSON.parseObject(jsonStr);
JSONObject applyParam = jsonObject.getJSONObject(SNAPSHOT_JSON_THIRD_PARTY_APPLY);
return applyParam.getString(key);
}
}
后面遇到新的场景再更新