1、doTrim函數,toJsonString函數、自定義java函數(工具類見附錄)
import com.dm.bs.model.vo.BsFieldTransResult; import com.dm.bs.model.vo.BsFieldTransVO; import com.dm.bs.repository.entity.BsFieldTrans; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; /** * BsFieldTrans轉換器 */ @Mapper(uses = {TypeConversionWorker.class}) public interface BsFieldTransMapping { BsFieldTransMapping INSTANCE = Mappers.getMapper(BsFieldTransMapping.class); @Mapping(target = "targetUrl",source = "targetUrl",qualifiedByName = "doTrim") @Mapping(target = "transKey",source = "transKey",qualifiedByName = "toJsonString") @Mapping(target = "transVal",source = "transVal",qualifiedByName = "toJsonString") @Mapping(target = "relatedField", expression = "java(typeConversionWorker.generateRelatedField(bsFieldTransVO.getTransKey(), bsFieldTransVO.getTransVal()))") //使用工具類處理 BsFieldTrans transToBsFieldTrans(BsFieldTransVO bsFieldTransVO); @Mapping(target = "relatedField",source = "relatedField",qualifiedByName = "listStr2CommaStr") BsFieldTransResult transToBsFieldTransResult(BsFieldTrans bsFieldTrans); }
2、
附錄:
1、轉換工具類
import com.dm.bs.model.vo.TransKeyVO; import com.dm.bs.model.vo.TransValVO; import com.dm.bs.util.JacksonUtil; import com.fasterxml.jackson.core.type.TypeReference; import org.mapstruct.Named; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; /** * Mapping通用轉換 */ @Component @Named("TypeConversionWorker") public class TypeConversionWorker { /** * 對象轉json字符串 * * @param obj * @return */ @Named("toJsonString") public String toJsonString(Object obj) { if (Objects.isNull(obj)) { return null; } return JacksonUtil.toJsonString(obj); } /** * 去空格 * * @param str * @return */ @Named("doTrim") public String doTrim(String str) { if (StringUtils.isEmpty(str)) { return null; } return str.trim(); } /** * 字符串轉List對象 * * @param str * @return */ @Named("toStrList") public List<String> toStrList(String str) { if (StringUtils.isEmpty(str)) { return null; } return JacksonUtil.jsonToObjByTypeRf(str, new TypeReference<List<String>>() { }); } /** * json字符串轉換為Map * * @param obj * @return */ @Named("toStrObjMap") public Object toStrObjMap(Object obj) { if (Objects.isNull(obj)) { return null; } return JacksonUtil.jsonToObjByTypeRf(obj.toString(), new TypeReference<Map<String, Object>>() { }); } /** * jsonLsit轉換為逗號隔開形式 * * @param obj * @return */ @Named("listStr2CommaStr") public String listStr2CommaStr(Object obj) { if (Objects.isNull(obj)) { return null; } List<String> strings = JacksonUtil.jsonToObjByTypeRf(obj.toString(), new TypeReference<List<String>>() { }); if (strings != null) { return String.join(",", strings); } return null; } /** * BsFieldTransMapping生成relatedField內容 */ @Named("generateRelatedField") public String generateRelatedField(List<TransKeyVO> transKey, List<TransValVO> transVal) { List<String> relatedFieldList = new ArrayList<>(); if (transKey != null && transKey.size() > 0) { transKey.forEach(k -> relatedFieldList.add(k.getCurrentKey())); } if (transVal != null && transVal.size() > 0) { transVal.forEach(v -> relatedFieldList.add(v.getTargetKey())); } return JacksonUtil.toJsonString(relatedFieldList); } /** * BsFieldTransMapping生成relatedField內容 */ @Named("getParentScope") public String getParentScope(String targetScope) { String[] split = targetScope.split("\\."); if (split.length == 1) { return ""; } StringBuilder parentScope = new StringBuilder(); for (int i = 0; i < split.length - 1; i++) { parentScope.append(split[i]); if (i < split.length - 2) { parentScope.append("."); } } return parentScope.toString(); } }
2、工具類
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; @Slf4j public class JacksonUtil { private static ObjectMapper mapper = new ObjectMapper(); /** * 對象轉json * * @param object * @return */ public static String toJsonString(Object object) { try { return mapper.writeValueAsString(object); } catch (JsonProcessingException e) { log.error("...Err...Jackson轉換字符串(String)過程失敗:::", e); e.printStackTrace(); } return null; } /** * json轉對象 * * @param json * @param clazz * @param <T> * @return */ public static <T> T jsonToBean(String json, Class<T> clazz) { try { return mapper.readValue(json, clazz); } catch (JsonProcessingException e) { log.error("...Err...Jackson轉換對象(Object)過程失敗:::", e); e.printStackTrace(); } return null; } /** * 字符串轉換為List * * @param listStr * @param typeReference new TypeReference<List<Object>>() {} * @param <T> * @return */ public static <T> T jsonToObjByTypeRf(String listStr, TypeReference<T> typeReference) { try { return mapper.readValue(listStr, typeReference); } catch (JsonProcessingException e) { log.error("...Err...Jackson轉換Object過程失敗:::", e); e.printStackTrace(); } return null; } }