開始前必讀:基于grpc從零開始搭建一個準生産分布式應用(0) - quickStart
1、Unknown property "discount" in result type TestMixBO. Did you mean "null"?可能有以種原因:
- 屬性名寫錯了;
- 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);
}
9、proto通過優化定義節省傳輸大小
message MyMessage {
//定義一個枚舉
enum DataType {
StudentType = 0;
WorkerType = 1;
}
//用data_type辨別傳的是那一個枚舉
DataType data_type = 1;
//标示每次枚舉類型最多隻能出現其中的一個 節省空間
oneof dataBody {
Student student = 2;
Worker worker = 3;
}
}