0
点赞
收藏
分享

微信扫一扫

基于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后缀。所以映射时需特殊指定一下,如下:

List<WorkflowDto> toDtos(List<WorkflowBo> var1);

@Mapping(source = "children", target = "childrenList")
WorkflowDto toDto(WorkflowBo var1);

7、Timestamp转date时时间会多8小时

@JsonFormat(pattern="yyyy-MM-dd",  timezone="GMT+8")

@Data
public static class StudyDateRange implements Serializable {
@JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date start;
@JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date end;
}
//这主要是时区问题引起的
@Mapping(target = "createdAt" , expression = "java(MapStructMapperUtil.dateToLocalDate(var1.getCtime()))" )

8、@AfterMapping

@AfterMapping
default void setLicenseActivationInfoBo(@MappingTarget LicenseActivationRecordBo bo, ActivationRecordEntity var1) {
List<LicenseActivationInfoBo> activationInfo = JSONUtil.toList(var1.getActivationInfo(), LicenseActivationInfoBo.class);
int accountTotal = 0;
for(LicenseActivationInfoBo item: activationInfo) {
accountTotal += item.getAccountLimit();
}
bo.setAccountLimit(accountTotal);
bo.setActivationInfo(activationInfo);
}


举报

相关推荐

0 条评论