乐趣区

关于java:JAVA日常工作解决的bug2多选条件筛选

业务场景:在用户轨迹上减少筛选性能,实现依据标签 1 和 2 来筛选

解决思路:在原有数据上减少接管前端的数据的字段,而后在 controller 层解决字段的信息,而后别离减少条件进行判断实现筛选性能 -- 只写下我批改的局部(此文章的目标就是为了在日常中查缺补漏,便于日后的温习和学习)

代码实现:
1. 在 dao 层实现字段减少来接管前端的数据(和前端人员沟通确定参数的模式)

2. 在实现层对条件 2 实现筛选

if (!StringUtil.isEmpty(params.getType())){String[] str2 = params.getType().split(",");
 Set<String> filter = new HashSet<>();
 for (String type : str2) {filter.add(type);}
    query.addMustTerm(new AbstractTermV2.MustMultTerm("deviceOs",filter));
}

3. 在 controller 减少筛选条件

long total = 0;
SimpleQuery.SimpleResponse rumResponse = null;
 // 浏览器
 if(!StringUtil.isEmpty(params.getTermType())) {
                    String n = "浏览器";
 String[] str = params.getTermType().split(",");
 Set<String> termType = new HashSet<>();
 for (String string : str) {termType.add(string);
 }
                    if (termType.contains(n)) {rumResponse = queryRum(params, cluster.keySet());
 total = rumResponse.getTotal();}
                }
        rumResponse = queryRum(params, cluster.keySet());
 total = rumResponse.getTotal();

在下面的业务实现过程中,所波及的知识点是后端如何接管前端的数据,Java 中应用.split()的办法, 以及汇合遍历的常识:

  1. 后端接管前端数据(https://blog.csdn.net/justry_…)
    1-1:后端参数是一个对象,且该参数前是以 @RequestBody 润饰的,那么前端传递 json 参数时,必须满足以下要求:
    后端 @RequestBody 注解对应的类在将 HTTP 的输出流 (含申请体) 拆卸到指标类 (即:@RequestBody 前面的类) 时,会依据 json 字符串中的 key 来匹配对应实体类的属性,如果匹配统一且 json 中的该 key 对应的值合乎 (或可转换为) 实体类的对应属性的类型要求时, 会调用实体类的 setter 办法将值赋给该属性。
    1-2:json 字符串中,如果 value 为 ”” 的话,后端对应属性如果是 String 类型的,那么承受到的就是 ””,如果是后端属性的类型是 Integer、Double 等类型,那么接管到的就是 null。
    1-3:json 字符串中,如果 value 为 null 的话,后端对应收到的就是 null
    1-4:如果某个参数没有 value 的话,在传 json 字符串给后端时,要么罗唆就不把该字段写到 json 字符串中;要么写 value 时,必须有值,null 或 ”” 都行。千万不能有相似 ”stature”:,这样的写法,如
{"":,--->X"":null,---> 正确
"":""----> 正确}

@RequestBody 间接以 String 接管前端传过来的 json 数据:
后端对应的 Controller:

应用 PostMan 测试:

2. 遍历汇合的办法
参考:https://www.jb51.net/article/…
3.split()的办法应用
应用此办法返回的是一个数组(以特定的格局分隔后的数组)
非凡状况有 * ^ : | . \
在应用这些为分隔条件是需注意必须应用本义符即 \ 加以本义,而后如果应用多个分隔符则须要借助 | 符号,如二所示,但须要本义符的依然要加上分隔符进行解决
参考:https://www.cnblogs.com/mingf…

退出移动版