JAVA-日常工作解决的bug2-多选条件筛选

业务场景:在用户轨迹上增加筛选功能,实现根据标签1和2来筛选
image.png

解决思路:在原有数据上增加接收前端的数据的字段,然后在controller层处理字段的信息,然后分别增加条件进行判断实现筛选功能--只写下我修改的部分(此文章的目的就是为了在日常中查缺补漏,便于日后的复习和学习)

代码实现:
1.在dao层实现字段增加来接收前端的数据(和前端人员沟通确定参数的形式)
image.png
2.在实现层对条件2实现筛选

if (!StringUtil.isEmpty(params.getType())){
        String[] str2 = params.getType().split(",");
 Set 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 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:
image.png
2.遍历集合的方法
参考:https://www.jb51.net/article/...
3.split()的方法使用
使用此方法返回的是一个数组(以特定的格式分隔后的数组)
特殊情况有 * ^ : | . \
在使用这些为分隔条件是需注意必须使用转义符即\加以转义,然后如果使用多个分隔符则需要借助 | 符号,如二所示,但需要转义符的仍然要加上分隔符进行处理
参考:https://www.cnblogs.com/mingf...

你可能感兴趣的:(java,后端)