问题:实体类构造参数IndexOutOfBounds
Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
解决
@AllArgsConstructor
@NoArgsConstructor
问题:LocalDateTime问题
java 8 date/time type java.time.LocalDateTime
not supported by default: add Module “com.fasterxml.jackson.datatype:jackson-datatype-jsr310” to enable handling (through reference chain: com.ld.poetry.entity.User[“createTime”])
解决
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
问题:redis缓存相关
org.apache.ibatis.cache.CacheKey cannot be cast to java.lang.String、
解决
自定义key 加密
问题:RPC远程调用问题
RPC远程调用,@RequestParam接收参数,请求参数过大,调用会报错400
原因
GET请求,HTTP规范对URL长度是没有限制的
浏览器有不同得限制。
简单可以理解为:Get请求,URL长度不要超过 2KB
Post请求,也是没有长度限制的。限制它的是服务器的处理能力,与存储大小。
还有就是Web容器的限制,比如Tomcat 默认是2MB。
问题: request.getRequestURI()获取数据问题
request.getRequestURI().toString()
获取得是Request URL地址
问题:sublist方法内存地址指向问题
会对原List产生影响,所以要慎用,对原List的增删会导致子SubList的的操作抛出并发修改异常
或参考
https://gitee.com/MEliauk/javastudy/tree/master/src/main/java/com/yifan/clone
测试用例
public static void main(String[] args) {
List list = new ArrayList();
for(int i = 0; i<10 ;i++){
list.add(i);
}
System.out.println("list->"+list);
List tempList = list.subList(0, 4);
System.out.println("tempList->"+tempList);
tempList.clear();
for(int i = 2; i<5 ;i++){
tempList.add(i);
}
System.out.println("tempList->"+tempList);
System.out.println("list->"+list);
}
list->[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
tempList->[0, 1, 2, 3]
tempList->[2, 3, 4]
list->[2, 3, 4, 4, 5, 6, 7, 8, 9]
问题:服务调用ClassCastException问题
java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class cn.swiftpass.transmit.dto.gxnx.body.social.SocialStatusDto
服务a调用服务b的方法,b服务中的方法返回的是泛型
根本原因:当项目A返回的ListLinkedHashMap
。
服务A中方法:
private static final ObjectMapper objectMapper = new ObjectMapper();
private static final Map<Class<?>, CollectionType> typeCache = new ConcurrentHashMap<>();
private <T> List<T> parseJsonArray(JSONArray jsonArray, Class<T> clazz) {
try {
CollectionType listType = typeCache.computeIfAbsent(
clazz,
k -> objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, k)
);
return objectMapper.readValue(jsonArray.toString(), listType);
} catch (JsonProcessingException e) {
logger.error("json转换对象失败:{}", e.getMessage());
throw new BusinessException("json转换对象失败:{}", e.getMessage());
}
}
解决:
修改A服务
private List<Object> parseJsonArray(JSONArray jsonArray) {
ObjectMapper objectMapper = new ObjectMapper();
CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Object.class);
return objectMapper.readValue(jsonArray.toString(), listType); // 返回 List<Object>
}
修改调用者B服务
// 1. 调用项目A的接口,获取原始数据 用List<Object>接收
List<Object> rawList = restTemplate.getForObject(apiUrl, List.class);
// 2. 使用 ObjectMapper 进行类型转换
ObjectMapper objectMapper = new ObjectMapper();
List<SocialStatusDto> resultList = objectMapper.convertValue(
rawList,
objectMapper.getTypeFactory().constructCollectionType(
List.class,
SocialStatusDto.class
)
);
日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com