日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jfinal js 拦截_jfinal 使用拦截器处理繁琐的前置条件判定

發(fā)布時(shí)間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jfinal js 拦截_jfinal 使用拦截器处理繁琐的前置条件判定 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用攔截器處理繁瑣的前置條件判定

背景

在開發(fā)過程中,為了提高程序的健壯性,對(duì)參數(shù)的校驗(yàn)是必不可少的,然而使用傳統(tǒng)的方式進(jìn)行參數(shù)校驗(yàn)時(shí),導(dǎo)致程序中存在了if xxx return xxx;處理不夠優(yōu)雅。雖然jfinal提供了Validator,但是使用過于繁瑣,對(duì)前后端分離不友好。 在guaua工具包中的Preconditions啟發(fā)下,本人利用攔截器和自定義異常實(shí)現(xiàn)了一個(gè)較為優(yōu)雅的參數(shù)校驗(yàn)方法。(注:未經(jīng)全面測(cè)試,僅供參考)

正文(直接上代碼)

ParaExceptionInterceptor 自定義異常攔截器(僅攔截返回值為Ret的方法)

public class ParaExceptionInterceptor implements Interceptor {

@SuppressWarnings("unchecked")

private static final List> DEFAULT_EXCPTIONS = Lists.newArrayList(ParaExcetion.class);

private static List> getConfigWithExceptionConfig(Invocation inv) {

ExceptionConfig config = inv.getMethod().getAnnotation(ExceptionConfig.class);

if (config == null)

config = inv.getTarget().getClass().getAnnotation(ExceptionConfig.class);

if (config != null) {

Class extends Exception>[] value = config.value();

return Arrays.asList(value);

}

return DEFAULT_EXCPTIONS;

}

/**

* (non-Javadoc)

* Title: intercept

* Description:對(duì)指定異常進(jìn)行攔截并封裝為錯(cuò)誤信息返回

* @param inv

* @see com.jfinal.aop.Interceptor#intercept(com.jfinal.aop.Invocation)

*/

@Override

public void intercept(Invocation inv) {

try {

inv.invoke();

} catch (Exception e) {

// 若返回值類型不是Ret則將異常繼續(xù)往上拋

Class> returnType = inv.getMethod().getReturnType();

if (!(returnType.equals(Ret.class))) {

throw e;

}

List> exceptionClasses = getConfigWithExceptionConfig(inv);

for (Class extends Exception> exceptionClass : exceptionClasses) {

if (Objects.equals(e.getClass(), exceptionClass) || Objects.equals(e.getClass().getSuperclass(), exceptionClass)) {

inv.setReturnValue(MRetKit.buildFail(e.getMessage()));

return;

}

}

throw e;

}

}

}

ParaExcetion 自定義異常

public class ParaExcetion extends com.iipcloud.api.exception.ParaExcetion {

/** serialVersionUID */

private static final long serialVersionUID = 4888200095167386189L;

/**

*

Title:

*

Description:

*/

public ParaExcetion() {

super();

}

/**

*

Title:

*

Description:

* @param message

* @param cause

* @param enableSuppression

* @param writableStackTrace

*/

public ParaExcetion(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {

super(message, cause, enableSuppression, writableStackTrace);

}

/**

*

Title:

*

Description:

* @param message

* @param cause

*/

public ParaExcetion(String message, Throwable cause) {

super(message, cause);

}

/**

*

Title:

*

Description:

* @param message

*/

public ParaExcetion(String message) {

super(message);

}

/**

*

Title:

*

Description:

* @param cause

*/

public ParaExcetion(Throwable cause) {

super(cause);

}

}

ExceptionConfig 異常注解

@Retention(RUNTIME)

@Target({ TYPE, METHOD })

public @interface ExceptionConfig {

Class extends Exception>[] value();

}

ParaCheckKit 配套工具類

public class ParaCheckKit {

private ParaCheckKit() {

super();

}

public static void requireFalse(boolean expression, String errMsgFormat, Object... args) {

requireTrue(!expression, String.format(errMsgFormat, args));

}

/**

* Title: checkPara

* Description: 檢查表達(dá)式是否滿足,若不滿足則拋出異常

* Date: 2020年2月25日

* @param expression

* @param errMsg

* @throws IllegalParaException

*/

public static void requireTrue(boolean expression, String errMsg) {

if (!expression) {

throw new IllegalParaException(errMsg);

}

}

public static void requireTrue(boolean expression, String errMsgFormat, Object... args) {

if (!expression) {

throw new IllegalParaException(String.format(errMsgFormat, args));

}

}

/**

* Title: requireNotNull

* Description: 判斷指定對(duì)象是否為空,為空則拋出異常

* Date: 2020年2月25日

* @param obj

* @param errMsg

* @throws IllegalParaException

*/

public static void requireNotNull(Object obj, String errMsg, Object... args) {

requireTrue(Objects.nonNull(obj), errMsg, args);

}

public static void requireNull(Object obj, String errMsg, Object... args) {

requireTrue(Objects.isNull(obj), errMsg, args);

}

/**

* Title: requireNotBlank

* Description:判斷指定字符串是否為空,為空則拋出異常

* Date: 2020年2月25日

* @param str

* @param errMsg

* @throws com.iipmes.exception.IllegalParaException

*/

public static void requireNotBlank(String str, String errMsg, Object... args) {

requireTrue(StrKit.notBlank(str), errMsg, args);

}

public static void requireBlank(String str, String errMsg, Object... args) {

requireTrue(StrKit.isBlank(str), errMsg, args);

}

/**

* Title: requireNotEmpty

* Description:

* Date: 2020年2月25日

* @param obj

* @param errMsg

* @throws com.iipmes.exception.IllegalParaException

*/

public static void requireNotEmpty(Object obj, String errMsg, Object... args) {

requireTrue(IIPUtil.notEmpty(obj), errMsg, args);

}

public static void requireEmpty(Object obj, String errMsg, Object... args) {

requireTrue(IIPUtil.isEmpty(obj), errMsg, args);

}

/**

* Title: checkModel

* Description: 檢查model中的指定字段是否為空,為空則拋出異常

* Date: 2020年2月25日

* @param model

* @param fields

*/

public static void checkModel(Model extends Model>> model, List fields, String errMsg, Object... args) {

requireTrue(fieldNotEmpty(model, fields), errMsg, args);

}

public static boolean fieldNotEmpty(Model extends Model>> model, String... fields) {

return fieldNotEmpty(model, Arrays.asList(fields));

}

/**

* Title: fieldNotEmpty

* Description: 檢查Model中指定的字段

* Date: 2020年2月25日

* @param model

* @param fields

* @return

*/

public static boolean fieldNotEmpty(Model extends Model>> model, List fields) {

for (String field : fields) {

if (ObjectKit.isEmpty(model.get(field))) {

return false;

}

}

return true;

}

}

使用demo

@Before(ParaExceptionInterceptor.class)

public class DemoService {

public Ret doSomeThing(Record record, Model extends Model>> model) {

ParaCheckKit.requireNotNull(record.getStr("id"), "id can not be null");

ParaCheckKit.checkModel(model, Lists.newArrayList("id,name"), "id required, name required");

// do Something

return Ret.ok();

}

}

注意事項(xiàng)

配合靜態(tài)方法導(dǎo)入更為舒爽

1.jpg

以上提供的只是一個(gè)簡(jiǎn)單的demo,適用于servce層,Controller層使用需要改動(dòng)(默認(rèn)無返回值,可自定義一個(gè)攔截器處理返回值返回給前端頁面,下面是一個(gè)簡(jiǎn)單示例)。

public class ActionInterceptor implements Interceptor {

/**

* (non-Javadoc)

*

Title: intercept

*

Description:

* @param inv

* @see com.jfinal.aop.Interceptor#intercept(com.jfinal.aop.Invocation)

*/

@Override

public void intercept(Invocation inv) {

inv.invoke();

Class> returnType = inv.getMethod().getReturnType();

if (returnType.equals(Void.class)) {

return;

}

Object returnValue = inv.getReturnValue();

if (returnType.equals(String.class)) {

inv.getController().render((String) returnValue);

} else if (returnType.equals(Ret.class)) {

inv.getController().renderJson((Ret) returnValue);

} else {

inv.getController().renderJson(RetKit.buildOk(returnValue));

}

}

}

總結(jié)

以上是生活随笔為你收集整理的jfinal js 拦截_jfinal 使用拦截器处理繁琐的前置条件判定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 三年大片在线观看 | 日本a级黄色 | 国产欧美精品在线观看 | 婷婷中文在线 | 国产精品一二三级 | 成人国产一区 | 国产情侣自拍av | 精品1区2区3区 | 黄色不卡| 亚洲一区二区三区在线看 | 制服av在线 | 四虎视频在线 | 亚洲色成人www永久网站 | 疯狂撞击丝袜人妻 | 国产精九九网站漫画 | 久久香蕉国产 | 久久国产精品一区二区三区 | 仙踪林久久久久久久999 | 天天天干干干 | 91婷婷 | av在线亚洲天堂 | 精品中出 | 欧美mv日韩mv国产网站app | 亚洲一区二区三区91 | 亚洲一区二区三区久久久 | 欧美综合图片 | 久久国产色av免费观看 | 国产亚洲综合在线 | 欧美一区网站 | 久久视频一区二区三区 | 国产精品99久久免费黑人人妻 | 爱射网| 老司机午夜免费福利 | av免费在线观看不卡 | 中文字幕无线码一区 | 欧美日韩亚洲国产综合 | 国产美女久久久 | 在线综合色 | 午夜影院美女 | 久久久久亚洲av成人网人人软件 | www.亚洲高清 | 日本欧美精品 | 玖玖精品视频 | 性生活在线视频 | 中文字幕有码在线视频 | 少妇人妻好深好紧精品无码 | 波多野结衣操 | 欧洲影院 | 中文人妻熟女乱又乱精品 | 国产精美视频 | 熟女少妇精品一区二区 | 在线不卡一区二区 | 色哟哟av | 天天综合干 | 日韩欧美国产高清 | 欧美mv日韩mv国产 | 国模大尺度视频 | 欧美操穴| 自拍偷拍校园春色 | 波多野结衣在线一区 | 在线a| 国产欧美激情在线观看 | 国产制服丝袜在线 | 久草电影在线 | 可以免费看毛片的网站 | 欧美一区二区性久久久 | 亚洲人毛茸茸 | av免费影院 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品视频在线观看免费 | 探花国产在线 | 国产区在线观看视频 | 国产在线视频卡一卡二 | 日韩黄色免费网站 | 亚洲在线观看免费视频 | 五月婷婷丁香花 | 国产精品久久久久久久av | 欧美自拍视频在线观看 | 亚洲免费视频一区二区 | 国产刺激对白 | 奇米狠狠操 | 午夜色网站 | 久久久久久久久久久久久久久久久久久久 | 大学生av| 亚洲无码精品一区二区三区 | 在线麻豆 | 无遮挡在线观看 | 操极品女神| 波多野结衣久久久久 | 国产区精品 | 免费观看黄色网页 | 日韩色黄大片 | 国产精品久久久久9999 | 91精品在线免费 | 欧美夜夜操| 天天射天天干天天 | 免费一级欧美片在线播放 | 老熟女一区二区三区 | 97免费公开视频 |