国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用AOP實(shí)現(xiàn)前端傳參時(shí)間的時(shí)區(qū)轉(zhuǎn)化

這篇具有很好參考價(jià)值的文章主要介紹了用AOP實(shí)現(xiàn)前端傳參時(shí)間的時(shí)區(qū)轉(zhuǎn)化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

新增注解

@Documented
@Target({FIELD,METHOD,PARAMETER,ANNOTATION_TYPE})
@Retention(RUNTIME)
public @interface MyDateFormatDeserializer {

    String pattern() default "yyyy-MM-dd HH:mm:ss";
    String oldPattern() default "yyyy-MM-dd HH:mm:ss";
}

新增AOP切面類(lèi)

@Aspect
@Component
public class MyDateFormatDeserializerAspect {
    private static Logger log = LoggerFactory.getLogger(MyDateFormatDeserializerAspect.class);

    @Pointcut("execution(* com.jovision.vse.*.*.web.controller..*.*(..))")
    public void pointCut() {
    }

    @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        //轉(zhuǎn)換
        dateFormat(joinPoint);
        return joinPoint.proceed();
    }

    public void dateFormat(ProceedingJoinPoint joinPoint) {
        Object[] objects = null;
        try {
            objects = joinPoint.getArgs();
            if (objects.length != 0) {
                for (int i = 0; i < objects.length; i++) {
                    //當(dāng)前只支持判斷對(duì)象類(lèi)型參數(shù)
                    convertObject(objects[i]);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("參數(shù)異常");

        }
    }

    private void convertObject(Object obj) throws IllegalAccessException {

        if (Objects.isNull(obj)) {
            log.info("當(dāng)前需要轉(zhuǎn)換的object為null");
            return;
        }
        String timeZoneStr = CurrentUserUtil.currentTimeZone();
        if(StringUtils.isNotBlank(timeZoneStr)){
            List<Field> fieldList = getSuperFields(obj.getClass(),true);
            for (Field field : fieldList) {
                boolean containFormatField = field.isAnnotationPresent(MyDateFormatDeserializer.class);
                if (containFormatField) {
                    //獲取訪問(wèn)權(quán)
                    field.setAccessible(true);
                    MyDateFormatDeserializer annotation = field.getAnnotation(MyDateFormatDeserializer.class);
                    String oldPattern = annotation.oldPattern();
                    String newPattern = annotation.pattern();
                    Object dateValue = field.get(obj);
                    if (Objects.nonNull(dateValue) && !StringUtils.isEmpty(oldPattern) && !StringUtils.isEmpty(newPattern)) {
                        String newValue = StringUtils.EMPTY;
                        try {
                            Date date = new Date();
                            if(dateValue instanceof Date){
                                date = (Date) dateValue;
                            }else if(dateValue instanceof String){
                                date = DateUtils.parseDate(dateValue.toString(), oldPattern);
                            }else{
                                log.error("parse date error,@MyDateFormatDeserializer must String or Date !!!");
                                return;
                            }
                            SimpleDateFormat currentTime = new SimpleDateFormat(newPattern);
                            TimeZone timeZone = TimeZone.getTimeZone(timeZoneStr);
                            currentTime.setTimeZone(timeZone);
                            newValue = currentTime.format(date);
                        } catch (ParseException e) {
                            throw new RuntimeException(e);
                        }
                        log.info("aop transform success - oldValue = {}, newValue = {} ",dateValue , newValue);
                        field.set(obj, newValue);
                    }
                }
            }
        }

    }

    /**
     * 獲取類(lèi)的所有屬性(含所有父級(jí)類(lèi))
     * @param clazz
     * @param containSuperClass
     * @return
     */
    private List<Field> getSuperFields(Class<?> clazz, boolean containSuperClass) {
        List<Field> fieldList = new ArrayList<>();
        //取父類(lèi)屬性
        while (clazz != null) {
            fieldList.addAll(Arrays.asList(clazz.getDeclaredFields())); //添加當(dāng)前類(lèi)全部屬性
            if(containSuperClass){
                // 父類(lèi)
                clazz = clazz.getSuperclass();
            }else{
                clazz = null;
            }
        }
        return fieldList;
    }
}

Controller傳參字段添加注解

@Data
public class TestDto {
    /**
     * 查詢的開(kāi)始時(shí)間
     */
    @MyDateFormatDeserializer
    private String queryStartTime;
    /**
     * 查詢的結(jié)束時(shí)間
     */
    @MyDateFormatDeserializer
    private String queryEndTime;
}

結(jié)束

這樣,前端請(qǐng)求進(jìn)到Controller后,開(kāi)始執(zhí)行業(yè)務(wù)邏輯之前,會(huì)將指定字段轉(zhuǎn)化完時(shí)區(qū)并參與執(zhí)行業(yè)務(wù)邏輯。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-638011.html

到了這里,關(guān)于用AOP實(shí)現(xiàn)前端傳參時(shí)間的時(shí)區(qū)轉(zhuǎn)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【時(shí)區(qū)】Flink JDBC 和CDC時(shí)間字段時(shí)區(qū) 測(cè)試及時(shí)間基準(zhǔn)

    【時(shí)區(qū)】Flink JDBC 和CDC時(shí)間字段時(shí)區(qū) 測(cè)試及時(shí)間基準(zhǔn)

    關(guān)聯(lián)文章: 各種時(shí)間類(lèi)型和timezone關(guān)系淺析 1. 測(cè)試一般的數(shù)據(jù)庫(kù)不含time zone的類(lèi)型的時(shí)區(qū)。 mysql timestamp(3) 類(lèi)型 postgres timestamp(3) 類(lèi)型 sqlserver datetime2(3) 類(lèi)型 oracle類(lèi)型 TIMESTAMP(3) 類(lèi)型 在以下測(cè)試之中均為 ts 字段 2.測(cè)試CDC中元數(shù)據(jù) op_ts 時(shí)區(qū) 在以下測(cè)試中cdc表建表均使用 ts_ms T

    2024年02月06日
    瀏覽(24)
  • Flink SQL 時(shí)區(qū) -- 時(shí)間字符串轉(zhuǎn)時(shí)間戳并轉(zhuǎn)換時(shí)區(qū)

    將時(shí)間字符串格式化,轉(zhuǎn)變成時(shí)間戳,再加8小時(shí)后寫(xiě)入clickhouse (該方法默認(rèn)精確度為秒,不適用毫秒) (1)UNIX_TIMESTAMP 作用:將時(shí)間字符串轉(zhuǎn)換成時(shí)間戳 用法:UNIX_TIMESTAMP(STRING datestr, STRING format) (2)CONVERT_TZ 作用:轉(zhuǎn)換時(shí)區(qū) 用法:CONVERT_TZ(string1, string2, string3) (實(shí)測(cè)僅獲

    2024年02月04日
    瀏覽(23)
  • PostGreSQL:時(shí)間戳?xí)r區(qū)問(wèn)題

    PostGreSQL:時(shí)間戳?xí)r區(qū)問(wèn)題

    ? ? ? ? PostGreSQL數(shù)據(jù)庫(kù)內(nèi)置的時(shí)間類(lèi)型如下,注意到:內(nèi)置的時(shí)間類(lèi)型被分為了with time zone-帶時(shí)區(qū)、without time zone-不帶時(shí)區(qū)兩種類(lèi)型, ? ?time 、 timestamp 和 interval都可以 接受一個(gè)可選的精度值? p (取值:0-6),這個(gè)精度值聲明在秒域中小數(shù)點(diǎn)之后保留的位數(shù)。缺省情況下

    2024年02月04日
    瀏覽(87)
  • JAVA 時(shí)區(qū)時(shí)間相互轉(zhuǎn)換

    ?? ??? ?//系統(tǒng)設(shè)置為UTC時(shí)區(qū) ? ? ? ? System.setProperty(\\\"user.timezone\\\", \\\"UTC\\\"); ? ? ? ? //String dateString = \\\"2023-04-06T07:23:36.539767500\\\"; ? ? ? ? String dateString = \\\"2023-04-06T08:15:06.662Z\\\"; ? ? ? ? System.out.println(\\\"UTC 時(shí)間:\\\"+dateString.subSequence(0, dateString.length())); ? ? ? ? String localDateTime1 = LocalD

    2024年02月16日
    瀏覽(19)
  • NodaTime生成指定時(shí)區(qū)的時(shí)間

    最近遇到需要進(jìn)行時(shí)區(qū)轉(zhuǎn)換和獲取/生成指定時(shí)區(qū)時(shí)間的需求。但網(wǎng)上大部分例子都是通過(guò)UTC時(shí)間或者DateTime.NtcNow或DateTime.Now實(shí)現(xiàn)的。但如果和第三方對(duì)接會(huì)出現(xiàn)對(duì)方只提供當(dāng)?shù)胤钱?dāng)前時(shí)間且沒(méi)帶時(shí)區(qū),這時(shí)候這些例子都不太滿足需求,所以研究了一下用NodaTime來(lái)解決這個(gè)問(wèn)題

    2024年02月14日
    瀏覽(17)
  • macOS修改默認(rèn)時(shí)區(qū)顯示中國(guó)時(shí)間

    macOS修改默認(rèn)時(shí)區(qū)顯示中國(guó)時(shí)間

    默認(rèn)時(shí)區(qū)不是中國(guó),顯示時(shí)間不是中國(guó)時(shí)間 打開(kāi)終端 ,刪除舊區(qū),并復(fù)制新時(shí)區(qū)到etcreb sudo -rm -rf /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 重啟系統(tǒng)后時(shí)間顯示為中國(guó)時(shí)間

    2024年01月21日
    瀏覽(89)
  • docker啟動(dòng)容器指定時(shí)區(qū) 解決mysql時(shí)間非北京時(shí)間問(wèn)題

    運(yùn)行docker鏡像的時(shí)候可以指定環(huán)境變量TZ來(lái)設(shè)置使用那個(gè)時(shí)區(qū)的時(shí)間。如果不指定有些鏡像在制作的時(shí)候設(shè)置了跟自己想用的時(shí)區(qū)不一樣的時(shí)區(qū)就會(huì)出現(xiàn)尷尬的問(wèn)題。 指定使用東八區(qū)時(shí)區(qū)命令如下: docker run -e TZ=Asia/Shanghai … docker啟動(dòng)mysql容器命令,指定庫(kù)表編碼:

    2024年02月14日
    瀏覽(29)
  • centos7設(shè)置時(shí)區(qū),時(shí)間+時(shí)間同步的三種方式

    centos7設(shè)置時(shí)區(qū),時(shí)間+時(shí)間同步的三種方式

    1.1查看當(dāng)前時(shí)區(qū): 1.2查看時(shí)間命令: 1.3選擇時(shí)區(qū)命令 設(shè)置timezone的時(shí)區(qū) 3.1安裝ntp 3.2啟動(dòng)ntp服務(wù) 3.3查看ntp服務(wù) 3.4修改ntp.conf文件 3.5重啟服務(wù) 3.6檢查同步狀態(tài) 3.7執(zhí)行硬件時(shí)間向軟件時(shí)間同步 3.8查看當(dāng)前時(shí)間 4.1最簡(jiǎn)單的方法,讓所有集群中的主機(jī)跟某個(gè)時(shí)間服務(wù)器的 時(shí)間同步

    2024年02月04日
    瀏覽(23)
  • centos 系統(tǒng)下查看時(shí)間時(shí)區(qū)以及修改

    centos 系統(tǒng)下查看時(shí)間時(shí)區(qū)以及修改

    1.1查看系統(tǒng)時(shí)間 1.2將系統(tǒng)日期修改為2014-7-2 : 1.3系統(tǒng)時(shí)間設(shè)置為 上午10:20 1.4系統(tǒng)時(shí)區(qū)修改 1.4.1查看系統(tǒng)時(shí)區(qū) 1.4.2修改時(shí)區(qū)(將上海改為系統(tǒng)時(shí)區(qū)) 提示是否要覆蓋,輸入y 確定 在Centos 7 中引入了一個(gè)叫 timedatectl 的設(shè)置設(shè)置程序.用法很簡(jiǎn)單: 2.1將硬件時(shí)鐘調(diào)整為與本地時(shí)鐘

    2024年02月11日
    瀏覽(25)
  • Jackson(二):@JsonFormat時(shí)間格式及時(shí)區(qū)問(wèn)題

    今天遇到一個(gè)查了很久的問(wèn)題,具體表現(xiàn)為前端傳過(guò)來(lái)的時(shí)間參數(shù)的時(shí)區(qū)是+0800,我用Jackson反序列化成對(duì)象時(shí),時(shí)間解析出來(lái)還是正確的,但是我再將對(duì)象序列化為Json數(shù)據(jù)時(shí)時(shí)區(qū)又變成了+0000時(shí)區(qū),導(dǎo)致前端出現(xiàn)了問(wèn)題,但是服務(wù)器上用命令date看時(shí),時(shí)區(qū)也是正確的。解決后

    2024年02月13日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包