小技巧
异步消息处理技巧
需要异步获取结果的数据,通常采用推+拉结合的方式。
“推”是为了保证时效性,推的时候有可能因为一些网络问题失败。
“拉”即定时任务主动拉取,是为了提高容错。
异常信息的记录技巧
对于一些查询类的错误,一般都可以再次发起请求复现。这样的错误只需要通过日志文件保存即可。
对于一些表单提交/修改的错误,通常无法复现,只通过日志打印很容易超出日志实效导致无法溯源,因此需要保存到数据库。
DTO/VO转换
注意:对象 范型擦除
* 1.避免直接拷贝泛型容器字段(如 List<T>、Map<K,V>)。
* 2.对泛型字段单独处理:先拷贝外层对象,再手动/工具转换内部元素。
* 3.优先使用 MapStruct:尤其在 DTO/Entity 转换频繁的项目中。举例
@Slf4j
public class BeanutilCopy {
@Data
public static class A {
private List<Integer> list;
}
@Data
public static class B {
private List<String> list;
}
public static void main(String[] args) throws JsonProcessingException {
//准备a数据
List<Integer> as = Collections.singletonList(111);
A a = new A();
a.setList(as);
//copy到b数据
B b = new B();
//泛型容器字段spring2.2.5版本能够copy过去,但是无法取出来。spring2.7.15版本无法copy过去。
BeanUtils.copyProperties(a, b);
//验证
System.out.println(a);
System.out.println(b);
System.out.println(b.getList());
//因为范型擦除,对象String指向了int类型,导致java.lang.Integer cannot be cast to java.lang.String
for (String bi : b.getList()) {
System.out.println(bi);
}
}
}Last updated
Was this helpful?