最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現頁面多查詢條件必選的統(tǒng)一處理思路

 更新時間:2023年06月15日 17:20:52   作者:我是一顆小虎牙_  
這篇文章主要為大家介紹了java實現頁面多查詢條件必選的統(tǒng)一處理思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

背景

開發(fā)中我們可能會遇到會頁面對應的數據表量級較大、頁面查詢條件過多的情況,那么有時候我們可能會限制做查詢操作是必須選擇至少一個查詢條件。

頁面效果:

直接查詢會提示:

思路

我們考慮使用注解+切面的形式來實現,用來確定哪些方法、哪些參數是需要做篩選和判斷的。

注解類:

用來標識某個參數和某個類的切入點

/**
 * 用來標識某個參數和某個類的切入點
 * @author zhouli
 * @Classname ConditionLimitAspect
 * @Date 2022/4/6 19:39
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.METHOD})
public @interface ConditionLimit {
    /**
     * 限制條件最少個數
     *
     * @return
     */
    int conditionNumberLimit() default 1;
}
/**
 * 用來標識哪些字段用來統(tǒng)計查詢列
 * @author zhouli
 * @Classname ConditionLimitAspect
 * @Date 2022/4/6 19:39
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ConditionField {
}

切面類:

@Slf4j
@Aspect
@Component
public class ConditionLimitAspect {
    @Around("execution(* com.p4.tp.system.modules.*.rest.*.*(..,@com.p4.tp.system.config.aop.ConditionLimit (*),..))")
    public Object doCheckCondition(ProceedingJoinPoint point) throws Throwable {
        MethodSignature signature = (MethodSignature) point.getSignature();
        Method method = signature.getMethod();
        Parameter[] parameters = method.getParameters();
        for (int i = 0; i < parameters.length; i++) {
            //多個參數時循環(huán)
            ConditionLimit annotation = parameters[i].getAnnotation(ConditionLimit.class);
            if (annotation == null) {
                continue;
            }
            //設定的最小查詢列數量
            int numberLimit = annotation.conditionNumberLimit();
            Object[] args = point.getArgs();
            Class<?> aClass =args[i].getClass();
            Field[] declaredFields = aClass.getDeclaredFields();
            //查詢條件計數
            int realNum = 0;
            for (Field field : declaredFields) {
                //獲取帶ConditionField注解的字段
                ConditionField conditionField = field.getAnnotation(ConditionField.class);
                if (conditionField == null) {
                    continue;
                }
                field.setAccessible(true);
                //獲取列值
                Object value = field.get(args[i]);
                if (value == null) {
                    continue;
                }
                try {
                    //列舉三種情況
                    if (value instanceof String && StringUtils.isNotBlank((String) value)) {
                        realNum++;
                    } else if (value instanceof Collection && !CollectionUtils.isEmpty((Collection<?>) value)) {
                            realNum++;
                    } else if (value instanceof Date) {
                            realNum++;
                    }
                } catch (Exception e) {
                    log.error("條件限定異常,", e);
                }
            }
            if (realNum < numberLimit) {
                log.info("查詢條件不足,請至少選擇或輸入" + numberLimit + "個查詢條件");
                throw new BusinessException("查詢條件不足,請至少選擇或輸入" + numberLimit + "個查詢條件");
            }
        }
        return point.proceed();
    }
}

使用

創(chuàng)建實體

@Data
public class FlowCardInfoParam {
    @ConditionField
    private String iccId;
    @ConditionField
    private String termSn;
    @ConditionField
    private String imei;
}

方法使用

    @PostMapping("/getPage")
    public ResponseEntity<Object> getPage(@RequestBody @ConditionLimit FlowCardInfoParam param) {
        return new ResponseEntity<>(null, HttpStatus.OK);
    }

現在我們使用接口請求

第一次不填寫參數值:{} ,查看日志結果:

第二次填寫 iccId 值重新請求: {"iccId":"898604B11921D0192003"},我們就能看到直接放過進行正常的業(yè)務調用了。

尾言

以上便是實現多查詢條件中必選至少一種字段值的一種思路,正常情況下我們沒有必要也沒有辦法枚舉出所有頁面中出現的所有必要的查詢條件,那么就可以考慮做找一個前置的統(tǒng)一處理方法。利用切面在進入方法前就進行判斷,該次請求是否符合接口最低的要求,更多關于java頁面多查詢條件的資料請關注腳本之家其它相關文章!

相關文章

  • java如何調用Groovy腳本

    java如何調用Groovy腳本

    這篇文章主要介紹了java如何調用Groovy腳本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • SpringBoot后端數據校驗實戰(zhàn)操作指南

    SpringBoot后端數據校驗實戰(zhàn)操作指南

    在項?開發(fā)中,對于前端提交的表單,后臺接?接收到表單數據后,為了保證程序的嚴謹性,通常后端會加?業(yè)務參數的合法校驗操作來避免程序的?技術性?bug,這篇文章主要給大家介紹了關于SpringBoot后端數據校驗的相關資料,需要的朋友可以參考下
    2022-07-07
  • 在ssm中使用ModelAndView跳轉頁面失效的解決

    在ssm中使用ModelAndView跳轉頁面失效的解決

    這篇文章主要介紹了在ssm中使用ModelAndView跳轉頁面失效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java web入門指南之在Idea上創(chuàng)建Java web項目

    Java web入門指南之在Idea上創(chuàng)建Java web項目

    好多書上的JavaWeb教程都是Eclipse以及MyEclipse,當然這里不論IDE的好壞,下面這篇文章主要給大家介紹了關于Java web入門指南之在Idea上創(chuàng)建Java web項目的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Java設計模式之責任鏈模式的概念、實現以及netty中的責任鏈模式

    Java設計模式之責任鏈模式的概念、實現以及netty中的責任鏈模式

    這篇文章主要給大家介紹了關于設計模式之責任鏈模式的概念、實現以及netty中的責任鏈模式的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java MyBatis可視化代碼生成工具使用教程

    Java MyBatis可視化代碼生成工具使用教程

    這篇文章主要介紹了Java MyBatis可視化代碼生成工具使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Springboot讀取templates文件html代碼實例

    Springboot讀取templates文件html代碼實例

    這篇文章主要介紹了Springboot讀取templates文件html代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • SpringCloud Feign如何在遠程調用中傳輸文件

    SpringCloud Feign如何在遠程調用中傳輸文件

    這篇文章主要介紹了SpringCloud Feign如何在遠程調用中傳輸文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 使用Springboot根據配置文件動態(tài)注入接口實現類

    使用Springboot根據配置文件動態(tài)注入接口實現類

    這篇文章主要介紹了使用Springboot根據配置文件動態(tài)注入接口實現類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 如何在Java中創(chuàng)建線程通信的四種方式你知道嗎

    如何在Java中創(chuàng)建線程通信的四種方式你知道嗎

    開發(fā)中不免會遇到需要所有子線程執(zhí)行完畢通知主線程處理某些邏輯的場景?;蛘呤蔷€程 A 在執(zhí)行到某個條件通知線程 B 執(zhí)行某個操作。下面我們來一起學習如何解決吧
    2021-09-09

最新評論

阳东县| 阳朔县| 富蕴县| 德昌县| 石泉县| 那曲县| 邹城市| 彭泽县| 手游| 西乡县| 平果县| 弥勒县| 抚州市| 张北县| 岳池县| 海门市| 斗六市| 城步| 玉屏| 广西| 乳源| 永城市| 宁津县| 方正县| 大邑县| 佛学| 合作市| 加查县| 平山县| 潮州市| 麦盖提县| 封丘县| 淮南市| 河北区| 通许县| 张家口市| 普格县| 略阳县| 广平县| 石楼县| 拜泉县|