MapStruct使用实例


package com.chinaunicom.base.server.user.converter;

import com.chinaunicom.base.server.user.entity.UserSpace;
import com.chinaunicom.base.server.user.converter.worker.UserSpaceConvert;
import com.chinaunicom.base.server.user.entity.UserSpaceEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;

@Mapper(componentModel = "spring", uses = {UserSpaceConvert.class})
public interface UserSpaceBaseConverter {
    UserSpaceBaseConverter INSTANCES = Mappers.getMapper(UserSpaceBaseConverter.class);

    @Mappings({
            @Mapping(source = "id", target = "id"),
            @Mapping(source = "employeeName", target = "employeeName"),
            @Mapping(source = "rootSpace", target = "rootSpace"),
            @Mapping(source = "createTime", target = "createTime"),
            @Mapping(source = "deleted", target = "deleted")
    })
    UserSpaceEntity to(UserSpace userSpace);

    @Mappings({
            @Mapping(source = "id", target = "id"),
            @Mapping(source = "employeeName", target = "employeeName"),
            @Mapping(source = "rootSpace", target = "rootSpace"),
            @Mapping(source = "createTime", target = "createTime"),
            @Mapping(source = "deleted", target = "deleted"),
            @Mapping(target = "age", expression = "java(com.chinaunicom.base.server.user.converter.worker.UserSpaceConvert.getAgeFromFeatures(userSpaceEntity.getFeatures()))")
    })
    UserSpace back(UserSpaceEntity userSpaceEntity);

    List toList(List source);

    List backList(List source);
}
UserSpaceEntity 有字段为string类型,保存的是json格式。对应的模型层有属性age是Integer类型的

public class UserSpaceConvert {

    public static Integer getAgeFromFeatures(String json) {
        Map valueMap = JSON.parseObject(json, Map.class);
        if (valueMap.containsKey("age")) {
            return Integer.valueOf(valueMap.get("age").toString());
        }

        return null;
    }
}
 
jdk