MapStruct文档(十一)——SPI

mapstruct提供了一些列SPI,供我们自定义实现一些功能:AccessorNamingStrategy(实现自定义的get/set,获取字段名)、DefaultProvider(实现自定义的建造者)、MappingExclusionProvider(实现自定义的排除,也就是不自动映射字段)、EnumMappingStrategy(实现自定义的枚举命名)、EnumTransformationStrategy(实现自定义的枚举转换)。

要实现自定义功能要先建一个项目,可以打包成jar包,自定义的实现以上接口,在resources包下新建META-INF.services包,再新建一个文件,文件名是被继承的类的全路径(都是在org.mapstruct.ap.spi包下),文件内容为自定义类的全路径;然后在使用到的项目中的pom文件的build->plugins->configuration->annotationProcessorPaths->mapstruct-processor的path后添加一个上述新建的项目的path标签。


public class CustomEnumTransformationStrategy implements EnumTransformationStrategy {

    @Override
    public String getStrategyName() {
        return "custom";
    }

    @Override
    public String transform(String value, String configuration) {
        return value.toLowerCase() + configuration;
    }
}

org.mapstruct.ap.spi.EnumTransformationStrategy文件内容

com.haru.acfun.CustomEnumTransformationStrategy

 


public enum LevelEnum {

    ABLE(1, "完美"),
    DISABLE(2, "合格"),
    NORMAL(3, "普通"),
    FAILED(4, "不及格"),
    OK(5, "还行"),
    FINE(6, "可以");

    private Integer code;

    private String desc;

    LevelEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}


@Mapper
public interface TestMapper {

    @EnumMapping(nameTransformationStrategy = "custom", configuration = "_status")
    DisableStatus toEnum(LevelEnum levelEnum);

}
 
@Component
public class TestMapperImpl implements TestMapper {

    @Override
    public DisableStatus toEnum(LevelEnum levelEnum) {
        if ( levelEnum == null ) {
            return null;
        }

        DisableStatus disableStatus;

        switch ( levelEnum ) {
            case ABLE: disableStatus = DisableStatus.able_status;
            break;
            case DISABLE: disableStatus = DisableStatus.disable_status;
            break;
            case NORMAL: disableStatus = DisableStatus.normal_status;
            break;
            case FAILED: disableStatus = DisableStatus.failed_status;
            break;
            case OK: disableStatus = DisableStatus.ok_status;
            break;
            case FINE: disableStatus = DisableStatus.fine_status;
            break;
            default: throw new IllegalArgumentException( "Unexpected enum constant: " + levelEnum );
        }

        return disableStatus;
    }
}

自定义的枚举转换是将枚举字段值转成小写再加上配置后缀。这样可以正常映射。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用\[1\]中提供的信息,可以使用STM32的HAL库来模拟SPI方式驱动W25Q128存储芯片。首先需要进行模拟SPI方式的IO配置,然后使用相应的驱动代码来实现功能。 W25Q128是一款SPI接口的NOR Flash芯片,具有128 Mbit的存储空间,相当于16M字节。NOR Flash是一种常用的用于存储数据的半导体器件,具有容量大、可重复擦写、按扇区/块擦除、掉电后数据可继续保存的特性。Flash的物理特性是只能写0,不能直接写1,写1需要进行擦除操作。 根据引用\[3\]中的实验,可以通过硬件接线将W25Q128模块与STM32连接起来,其中VCC接3.3V,CS接PA4,CLK接PA5,DO接PA6,DI接PA7。然后可以使用CubeMX进行相应的配置。 要获取W25Q128的ID,可以使用SPI通信协议来读取芯片的ID寄存器。具体的代码实现可以参考引用\[1\]中提供的驱动代码。 #### 引用[.reference_title] - *1* [STM32CubeMX | STM32使用HAL库模拟SPI方式驱动W25Q128存芯片](https://blog.csdn.net/qq153471503/article/details/106895933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32之SPI和W25Q128](https://blog.csdn.net/weixin_49001476/article/details/130909856)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值