欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springmvc @PathVariable的用法解析

 更新時間:2021年10月26日 08:43:56   作者:zxy861114  
這篇文章主要介紹了Springmvc @PathVariable的用法解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@PathVariable的用法解析

問題描述

    @RequestMapping(value = "/auth1/{uuid}/xxx", method = RequestMethod.GET)
    public void imageCode1(@PathVariable (value = "uuid") String uuid) {
        logger.info(uuid);
    }

見以上代碼,url中的uuid如何解析成為參數傳遞進來。

解析過程

(接收請求:如/auth1/xxxx-xxx-xxx/xxx)

1. 將/auth1/{uuid}/xxx根據/拆成 auth1、{uuid}、xxx

2. 將{uuid}替換成(.*),并紀錄key為uuid

3. 同樣將/auth1/xxxx-xxx-xxx/xxx拆成auth1、xxxx-xxx-xxx、xxx

4. 進行正則匹配,并根據group得到uuid=xxxx-xxx-xxx.

5. 將uuid=xxxx-xxx-xxx放入request的一個attribute中。

6. 根據反射和標注得到pathvariable名為uuid

7. 去request得到這個uuid,然后進行方法調用。

下面是測試springmvc的解析代碼。

    public static void main(String[] args) {
        AntPathMatcher matcher = new AntPathMatcher();
        System.out.println(matcher.match("{uuid}", "xxxx"));
        Map<String, String> result = matcher.extractUriTemplateVariables("{uuid}", "xxx");
        System.out.println(result);
    }

當上述問題寫成:

    @RequestMapping(value = "/auth1/{uuid}/xxx", method = RequestMethod.GET)
    public void imageCode1(@PathVariable String uuid) {
        logger.info(uuid);
    }

時,以下代碼模擬測試了反射獲取uuid的過程

    public static void main(String[] args) throws Exception {
        BeanInfo beanInfo = Introspector.getBeanInfo(A.class);
        MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();
        for (MethodDescriptor methodDescriptor : methodDescriptors) {
            System.out.println("method:" + methodDescriptor.getName());
            ParameterDescriptor[] params = methodDescriptor.getParameterDescriptors();
            if (params != null) {
                for (ParameterDescriptor param : params) {
                    System.out.println("param:" + param.getName());
                }
            }
        }
        Method[] methods = A.class.getMethods();
        for (Method method : methods) {
            if (method.getName().equals("hello")) {
                LocalVariableTableParameterNameDiscoverer discoverer =
                        new LocalVariableTableParameterNameDiscoverer();
                String[] methodNames = discoverer.getParameterNames(method);
                for (String methodName : methodNames) {
                    System.out.println(methodName);
                }
            }
        }
    }

動態(tài)參數使用@PathVariable

現在有如下的一條超鏈接

<a href="<c:url value="/actions/article/readArticle/${article.id}"/> "
                                                 target="_blank">${article.title}</a>

這條超鏈接的特點就是在URL路徑中添加了EL表達式解析出來的id值。

因此,在SpringMVC的Controller層中,需要解析它,使用@PathVariable("articleId") Long articleId 來解析。

@PathVariable是專門用來解析URL請求中的動態(tài)參數。

在Controller層的代碼如下

public static final String URL_ARTICLE_READ = "article/readArticle/{articleId}";
    /**
     * 去文章詳情頁面
     * 根據URL路徑中指定的文章ID號,去獲取制定文章的內容
     *
     * @param articleId 指定的文章的ID號
     * @return          獲取此文章的數據,并去文章詳情頁面
     */
    @RequestMapping(value = {URL_ARTICLE_READ} )
    public ModelAndView readArticle(@PathVariable("articleId") Long articleId){
        LOGGER.info("enter article detail page, articleId = {}",articleId);
        final Article article = articleService.getArticleById(articleId);
 ...
    }

這樣,頁面上的${article.id}的值,就最終映射到了Java中的Long articleId 上了。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Springboot中登錄后關于cookie和session攔截問題的案例分析

    Springboot中登錄后關于cookie和session攔截問題的案例分析

    這篇文章主要介紹了Springboot中登錄后關于cookie和session攔截案例,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • mybatis插入數據不返回主鍵id的可能原因及解決方式

    mybatis插入數據不返回主鍵id的可能原因及解決方式

    這篇文章主要介紹了mybatis插入數據不返回主鍵id的可能原因及解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot啟動并初始化執(zhí)行sql腳本問題

    SpringBoot啟動并初始化執(zhí)行sql腳本問題

    這篇文章主要介紹了SpringBoot啟動并初始化執(zhí)行sql腳本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java利用File類創(chuàng)建文件的示例代碼

    Java利用File類創(chuàng)建文件的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Java中的File類創(chuàng)建文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 基于@RequestBody注解只能注入對象和map的解決

    基于@RequestBody注解只能注入對象和map的解決

    這篇文章主要介紹了@RequestBody注解只能注入對象和map的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java 通過反射遍歷所有字段修改值的實例代碼

    java 通過反射遍歷所有字段修改值的實例代碼

    這篇文章主要介紹了java 通過反射遍歷所有字段修改值,通過java 的反射,遍歷所有字段,進行一個判斷,取出來的值是帶有圖片鏈接的,進行操作,省去了很多代碼,理解也很容易,下面跟隨小編看下實例代碼吧
    2021-05-05
  • SpringBoot的@RestControllerAdvice作用詳解

    SpringBoot的@RestControllerAdvice作用詳解

    這篇文章主要介紹了SpringBoot的@RestControllerAdvice作用詳解,@RestContrllerAdvice是一種組合注解,由@ControllerAdvice,@ResponseBody組成,本質上就是@Component,需要的朋友可以參考下
    2024-01-01
  • java判斷一個文件是否為二進制文件的方法

    java判斷一個文件是否為二進制文件的方法

    這篇文章主要介紹了java判斷一個文件是否為二進制文件的方法,涉及java針對文件的讀取及編碼判斷技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java之SpringBoot定時任務案例講解

    Java之SpringBoot定時任務案例講解

    這篇文章主要介紹了Java之SpringBoot定時任務案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • JNDI具體用法詳解

    JNDI具體用法詳解

    JNDI是java命名和目錄接口,本文主要介紹了JNDI具體用法詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論