开发过程遇到的问题记录

文章介绍了如何对Map按key进行升序排序,使用BeanUtil复制对象并忽略特定字段的错误处理,以及泛型在获取用户头像场景的应用。同时,讨论了在多线程定时任务中@Autowired注入报空指针的解决方案,以及NGINX对PUT和DELETE请求的配置问题。另外,提到了AOP中@Around通知不调用proceed()导致接口未执行的问题,以及自定义注解在类级别未生效的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.map 按 key 升序排序啊

private static Map<String, Long> sortByKey(Map<String, Long> map) {
    Map<String, Long> result = new LinkedHashMap<>(map.size());
    map.entrySet().stream()
            .sorted(Map.Entry.comparingByKey())
            .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
    return result;
}

2.BeanUtil.copyProperties(param, WosOrder.class, new String[]{"planFixedTime"});

copy时Date类型为null报错,可以忽略字段

3.泛型使用,获取用户头像

public <T> void getUserIcon(List<T> c, String userId, String userIcon)  {
    List<String> list = new ArrayList<>();
    Iterator<T> iterator = c.iterator();
    while (iterator.hasNext()) {
        T t = iterator.next();
        String id = BeanUtil.getProperty(t, userId);
        list.add(id);
    }
    List<SysUser> sysUsers = this.listByIds(list);
    Map<String, String> userMap = sysUsers.stream().collect(HashMap::new,(map, it)->map.put(it.getId(),it.getUsericon()),HashMap::putAll);
    for (T t : c) {
        String user = BeanUtil.getProperty(t, userId);
        BeanUtil.setProperty(t, userIcon, userMap.get(user));
    }
}

应用举例:

sysUserService.getUserIcon(wosOrderlogList, "processUser", "userIcon");
sysUserService.getUserIcon(newsList, "messagesender", "userIcon");

4.定时任务(多线程中可能也不行)使用@Autowired注入service时报空指针,可改为通过BeanFactory获取Bean实例

5. nginx访问后端PUT,DELETE请求访问不通(psotman可以访问),先修改了nginx配置文件增加了PUT,DELETE请求,然而并没有用

 盲猜可能网关拦截了delete和put请求,又让前端把put和delete请求改为post,可参考用域名访问接口, get和post请求均正常,而put和delete请求均无法正常使用_相约黄昏后007的博客-优快云博客

6.使用aop记录接口调用记录日志,使用@Around通知,因为内部没有调用proceed()方法导致接口没有被执行(或改为@Before通知类型也可以不用调用proceed)

7.自定义注解作用在类上未生效,因为在切点表达式中使用了@annotation,改成@within即可

@annotation可以使自定义注解标注的方法进入切面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值