踩坑记录

大家好,最近忙于项目需求,玩命的开发,™的累死了。 闲下来回顾一下项目中遇到的坑,顺便记录一下。
1 首先是和前端对接过程中遇到的问题

  • 问题描述:前端调用我发布测试环境的接口,GET请求。参数什么的,分页信息都传的很对,结果返回的值确实空的。。。很是费解。可是我在本地进行调试的时候却是有数据的。这是为什么呢? 后来我才发现,经过断点调试,结果我发现我在接口的model类中
    踩坑记录 期次id 为 空字符串。 这就找到原因所在了。前端列表查询的时候如果参数为空的话,那么他默认给传的是空字符串,然后走Nginx,在转发到我的接口上,我接到的参数是这样的, 例子:这个是前端传给我的链接 http://127.0.0.1:8080/api/xxx/flowers/61a8458c4a4edb41696b8866/awards-records/export?dpAccount=&stageId=&pageNum=1&pageSize=10000000 。 大家看到stageId 这个字段,为空的话就会拼接在接口路径中。所以,我想了办法把参数为空的字段替换成null。就完美搞定。

ps:此接口必须是GET请求的情况下才会出现次问题。

解决办法:
自定义注解进行拦截为空字符串的字段置为null。

代码如下 自定义注解
@Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Empty2Null { }

2 添加 Empty2Null 注解切面拦截
`
@Aspect
@Component
public class Empty2NullAspect {

@Pointcut("@annotation(com.dapeng.cloud.service.wh.infrastructure.annotaion.Empty2Null)")
public void execudeService() {
}

@Around("execudeService()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
    Object[] args = joinPoint.getArgs();
    //遍历参数 修改带有需求字段对象的值
    for (Object obj : args) {
        try {
            Class<?> clazz = obj.getClass();
            Field[] fieldInfo = clazz.getDeclaredFields();
            for (Field field : fieldInfo) {
                field.setAccessible(true);
                Object val = field.get(obj);
                //值为 空字符串 时 赋值为 null
                if (null != val && "".equals(val)) {
                    field.set(obj, null);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return joinPoint.proceed(args);
}

}
`

然后使用方法在 GET请求控制器Controller中即可解决前端传参为空查询不到数据的问题。

上一篇:Redis 笔记


下一篇:libsecp256k1比特币密码算法开源库(八)