• 基于grpc从零开始搭建一个准生产分布式应用(6) - 06 - MapStruct常见问题汇总


    1、Unknown property "discount" in result type TestMixBO. Did you mean "null"?可能有以种原因:

    1. 属性名写错了;
    2. maven中的编译插件中lombok的配置配置在了mapstrut之后,导致lombok注解没有执行;

    2、Unknown property "discount" in result type TestMixBO. Did you mean "discountG"?

    BO类中属性名和setter/getter方法名称不匹配,这个一般是由人工修改引起的;

    3、No property name "discount" exsits in source parameter(s).Did you mean "discountG"?

    BO类中属性名和setter/getter方法名称不匹配,这个一般是由人工修改引起的;

    4、支持几种lombok注解

    @Builder、@AllArgsConstructor

    5、用异常代替非空验证?

    非空验证时可以不指定@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)属性,直接使用@Mapper

    6、proto映射时集合为啥总为空?

    原因是proto会把repeat修饰的变量后面默认给加上List后缀。所以映射时需特殊指定一下,如下:

    1. List<WorkflowDto> toDtos(List<WorkflowBo> var1);
    2. @Mapping(source = "children", target = "childrenList")
    3. WorkflowDto toDto(WorkflowBo var1);
    7、Timestamp转date时时间会多8小时
    1. @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
    2. @Data
    3. public static class StudyDateRange implements Serializable {
    4. @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
    5. @DateTimeFormat(pattern = "yyyy-MM-dd")
    6. private Date start;
    7. @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
    8. @DateTimeFormat(pattern = "yyyy-MM-dd")
    9. private Date end;
    10. }
    11. //这主要是时区问题引起的
    12. @Mapping(target = "createdAt" , expression = "java(MapStructMapperUtil.dateToLocalDate(var1.getCtime()))" )
    8、@AfterMapping
    1. @AfterMapping
    2. default void setLicenseActivationInfoBo(@MappingTarget LicenseActivationRecordBo bo, ActivationRecordEntity var1) {
    3. List<LicenseActivationInfoBo> activationInfo = JSONUtil.toList(var1.getActivationInfo(), LicenseActivationInfoBo.class);
    4. int accountTotal = 0;
    5. for(LicenseActivationInfoBo item: activationInfo) {
    6. accountTotal += item.getAccountLimit();
    7. }
    8. bo.setAccountLimit(accountTotal);
    9. bo.setActivationInfo(activationInfo);
    10. }
    9、proto通过优化定义节省传输大小
    1. message MyMessage {
    2. //定义一个枚举
    3. enum DataType {
    4. StudentType = 0;
    5. WorkerType = 1;
    6. }
    7. //data_type标识传的是那一个枚举
    8. DataType data_type = 1;
    9. //标示每次枚举类型最多只能出现其中的一个 节省空间
    10. oneof dataBody {
    11. Student student = 2;
    12. Worker worker = 3;
    13. }
    14. }
  • 相关阅读:
    CSP-J/S2022游寂寞记
    Java计算机毕业设计大学生家教管理系统源码+系统+数据库+lw文档
    Java之Map、三种Map遍历方式、HashMap、TreeMap、IO流、Properties、反射、获取类对象的三种方式、注解、元注解、工厂模式、装饰器
    使用maven创建springboot项目
    react:封装组件
    【LeetCode-中等题】78. 子集
    Spring学习(3) Bean的作用域和生命周期
    html5怎么实现语音搜索
    【CSS】全局滚动条样式设置
    buuctf web [ACTF2020 新生赛]Upload
  • 原文地址:https://blog.csdn.net/liudonglovehemin/article/details/133808197