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

02 SpringMVC接收數(shù)據(jù)之訪問路徑設置+四種接參方式+@EnableWebMvc

這篇具有很好參考價值的文章主要介紹了02 SpringMVC接收數(shù)據(jù)之訪問路徑設置+四種接參方式+@EnableWebMvc。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.1 訪問路徑設置

@RequestMapping注解的作用就是將請求的 URL 地址和處理請求的方式(handler方法)關聯(lián)起來,建立映射關系。

SpringMVC 接收到指定的請求,就會來找到在映射關系中對應的方法來處理這個請求。

1.1.1 精準路徑匹配

@Controller
public class UserController {

    /**
     * 精準設置訪問地址 /user/login
     */
    @RequestMapping(value = {"/user/login"})
    @ResponseBody
    public String login(){
        System.out.println("UserController.login");
        return "login success!!";
    }

1.1.2 模糊路徑匹配

在@RequestMapping注解指定 URL 地址時,通過使用通配符,匹配多個類似的地址。

@Controller
public class ProductController {

    /**
     *  路徑設置為 /product/*  
     *    /* 為單層任意字符串  /product/a  /product/aaa 可以訪問此handler  
     *    /product/a/a 不可以
     *  路徑設置為 /product/** 
     *   /** 為任意層任意字符串  /product/a  /product/aaa 可以訪問此handler  
     *   /product/a/a 也可以訪問, /product/a/a/a還可以訪問
     *  
     * 將來的配置攔截器也遵循這個規(guī)則
     */
    @RequestMapping("/product/*")
    @ResponseBody
    public String show(){
        System.out.println("ProductController.show");
        return "product show!";
    }
}

1.1.3 類和方法級的@RequestMapping

  1. 設置到類級別:@RequestMapping 注解可以設置在控制器類上,用于映射整個控制器的通用請求路徑。這樣,如果控制器中的多個方法都需要映射同一請求路徑,就不需要在每個方法上都添加映射路徑。
  2. 設置到方法級別:@RequestMapping 注解也可以單獨設置在控制器方法上,用于更細粒度地映射請求路徑和處理方法。當多個方法處理同一個路徑的不同操作時,可以使用方法級別的 @RequestMapping 注解進行更精細的映射。
  3. 并且, 可以將兩者結合優(yōu)化代碼的實現(xiàn) :
//1.標記到handler方法
    @Controller
    public class UserController {
    
    @RequestMapping(value = {"/user/login"})
    @ResponseBody
    public String login(){
        System.out.println("UserController.login");
        return "login success!!";
    }
    
    @RequestMapping(value = {"/user/register"})
    @ResponseBody
    public String register(){
        System.out.println("UserController.register");
        return "register success!!";
    }
}


//2.優(yōu)化標記類+handler方法
    //類上定位到/user
    @RequestMapping("/user")
    @Controller
    public class UserController {
    
    //handler方法上再進一步指明
    @RequestMapping(value = {"/login"})
    @ResponseBody
    public String login(){
        System.out.println("UserController.login");
        return "login success!!";
    }
    
    @RequestMapping(value = {"/register"})
    @ResponseBody
    public String register(){
        System.out.println("UserController.register");
        return "register success!!";
    }
}

1.1.4 請求方法限制

HTTP 協(xié)議定義了八種請求方式,在 SpringMVC 中封裝到了下面這個枚舉類:

public enum RequestMethod {
  GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
  • 默認情況下:@RequestMapping所注解的方法/類, 任何請求方式都可以對接過來!
  • 可以在在@RequestMapping中增加一個字段method=RequestMethod.xxx來指定請求方式 ,
  • 可同時指定多種請求方式 :
  • 違背請求方式,會出現(xiàn)405異常!!
@Controller
public class UserController {

    /**
     * 精準設置訪問地址 /user/login
     * method = RequestMethod.POST 可以指定單個或者多個請求方式!
     * 注意:違背請求方式會出現(xiàn)405異常!
     */
    @RequestMapping(value = {"/user/login"} , method = RequestMethod.POST)
    @ResponseBody
    public String login(){
        System.out.println("UserController.login");
        return "login success!!";
    }

    /**
     * 指定多種請求方式
     */
    @RequestMapping(value = {"/user/register"},method = {RequestMethod.POST,RequestMethod.GET})
    @ResponseBody
    public String register(){
        System.out.println("UserController.register");
        return "register success!!";
    }

}

1.1.5 優(yōu)化請求方法限制的代碼 :

@RequestMapping 的 HTTP 方法特定快捷方式變體:

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

注意:進階注解只能添加到handler方法上,無法添加到類上!

@RequestMapping(value="/login",method=RequestMethod.GET)
||
@GetMapping(value="/login")

1.1.7 @GetMapping和@PostMapping :

  1. 安全性:
    涉及敏感數(shù)據(jù)或操作時,使用POST請求可能更安全。因為GET請求的參數(shù)直接暴露在URL中,可能會被記錄在服務器日志或瀏覽器歷史記錄中,而POST請求的參數(shù)通常在請求體中,相對更安全。
  2. 請求體:
    如果操作需要接收復雜的請求體,例如JSON或表單數(shù)據(jù),使用POST請求更為合適。POST請求的請求體可以用于傳遞較大或復雜的數(shù)據(jù)。
  3. RESTful設計原則:
    根據(jù)RESTful原則,GET請求用于讀取資源,而POST請求用于創(chuàng)建或修改資源。

1.1.6常見問題 :

出現(xiàn)原因:多個 handler 方法映射了同一個地址,導致 SpringMVC 在接收到這個地址的請求時該找哪個 handler 方法處理。

There is already ‘demo03MappingMethodHandler’ bean method com.atguigu.mvc.handler.Demo03MappingMethodHandler#empGet() mapped.


1.2 接收參數(shù)

1.2.1 param和json參數(shù)比較

在 HTTP 請求中,我們可以選擇不同的參數(shù)類型,如 param 類型和 JSON 類型。下面對這兩種參數(shù)類型進行區(qū)別和對比:

  1. 參數(shù)編碼:

    param 類型的參數(shù)會被編碼為 ASCII 碼。例如,假設 name=john doe,則會被編碼為 name=john%20doe。而 JSON 類型的參數(shù)會被編碼為 UTF-8。

  2. 參數(shù)順序:

    param 類型的參數(shù)沒有順序限制。但是,JSON 類型的參數(shù)是有序的。JSON 采用鍵值對的形式進行傳遞,其中鍵值對是有序排列的。

  3. 數(shù)據(jù)類型:

    param 類型的參數(shù)僅支持字符串類型、數(shù)值類型和布爾類型等簡單數(shù)據(jù)類型。而 JSON 類型的參數(shù)則支持更復雜的數(shù)據(jù)類型,如數(shù)組、對象等。

  4. 嵌套性:

    param 類型的參數(shù)不支持嵌套。但是,JSON 類型的參數(shù)支持嵌套,可以傳遞更為復雜的數(shù)據(jù)結構。

  5. 可讀性:

    param 類型的參數(shù)格式比 JSON 類型的參數(shù)更加簡單、易讀。但是,JSON 格式在傳遞嵌套數(shù)據(jù)結構時更加清晰易懂。

總的來說,param 類型的參數(shù)適用于單一的數(shù)據(jù)傳遞,而 JSON 類型的參數(shù)則更適用于更復雜的數(shù)據(jù)結構傳遞。根據(jù)具體的業(yè)務需求,需要選擇合適的參數(shù)類型。在實際開發(fā)中,常見的做法是:在 GET 請求中采用 param 類型的參數(shù),而在 POST 請求中采用 JSON 類型的參數(shù)傳遞。


1.2.2 param參數(shù)接收

  1. 直接傳值
    例如客戶填寫表單后 , 參數(shù)直接放在鏈接中傳遞:
    此時在handler中 , 只要形參名和類型都與傳遞參數(shù)一一對應.即可自動接收 :
@Controller
@RequestMapping("param")
public class ParamController {

    /**
     * 前端請求鏈接 : localhost:8080/param/value?name=你好age=18
     * 利用形參列表,直接接收前端傳遞的param參數(shù)!
     *    要求: 參數(shù)名 = 形參名
     * 
     *          類型相同
     * 出現(xiàn)亂碼正常,json接收具體解決!!
     * @return 返回前端數(shù)據(jù)
     */
    @GetMapping(value="/value")
    @ResponseBody
    public String setupForm(String name,int age){
        System.out.println("name = " + name + ", age = " + age);
        return name + age;
    }
}

直接傳值有一個顯然的缺點 , 形參和傳遞參數(shù)并不一定同名且一一對應(例如用戶干脆就不填age)

  1. @RequestParam注解傳值 (僅可在形參列表中聲明)

@RequestParam使用場景:

  • 指定綁定的請求參數(shù)名
  • 要求請求參數(shù)必須傳遞 (默認為必須傳遞)
  • 為請求參數(shù)提供默認值
 /**
 * 前端請求: http://localhost:8080/param/data?name=xx&stuAge=18
 * 
 *  使用@RequestParam注解標記handler方法的形參
 *  指定形參對應的請求參數(shù)@RequestParam(請求參數(shù)名稱)
 */
@GetMapping(value="/data")
@ResponseBody
//通過@RequestPararm注解,指定傳遞參數(shù)name賦給形參name ,
//                      指定傳遞參數(shù)stuAge賦給形參age , 且修改為不必須傳遞 , 設定默認值18
public Object paramForm(@RequestParam(value = "name") String name, 
                        @RequestParam(value = "stuAge",required = false,defaultValue = "18") int age){

    System.out.println("name = " + name + ", age = " + age);
    //
    return name+age;
}

默認情況下,使用@RequestPararm注解的方法參數(shù)是必需的,但可以通過將 @RequestParam 注解的 required 標志設置為 false!

  1. 特殊場景接值

a. 一名多值
需求 : 多選框,提交的數(shù)據(jù)的時候一個key對應多個值,我們可以使用集合進行接收!

  /**
   * 前端請求: http://localhost:8080/param/mul?hbs=吃&hbs=喝
   *  一名多值,可以使用集合接收即可!但是需要使用@RequestParam注解指定
   */
  @GetMapping(value="/mul")
  @ResponseBody
  public Object mulForm(@RequestParam List<String> hbs){
      System.out.println("hbs = " + hbs);
      return hbs;
  }

b. 實體接收

優(yōu)點 : 可以在方法內(nèi)部直接使用對象的屬性來訪問請求參數(shù),而不需要每個參數(shù)都寫一遍。
缺點 : 由于是通過對象傳值 , 無法采用@RequestParam綁定形參和傳遞參數(shù) , 因此二者的屬性名必須要相同 . 即User類內(nèi)部定義的是name和age,那么傳遞參數(shù)的名也必須是name和age.

定義一個用于接收參數(shù)的實體類:

public class User {

  private String name;

  private int age = 18;

  // getter 和 setter 略
}

在控制器中,使用實體對象接收,示例代碼如下:

@Controller
@RequestMapping("param")
public class ParamController {

    @POSTMapping(value = "/user")
    @ResponseBody
    public String addUser(User user) {
        // 在這里可以使用 user 對象的屬性來接收請求參數(shù)
        System.out.println("user = " + user);
        return "success";
    }
}

在上述代碼中,將請求參數(shù)name和age映射到實體類屬性上!要求屬性名必須等于參數(shù)名!否則無法映射!

使用postman傳遞參數(shù)測試:


1.2.3 接收JSON參數(shù)(@RequestBody)

  • @RequestBody 注解來將 JSON 數(shù)據(jù)轉(zhuǎn)換為 Java 對象
  • @RequestBody 注解表示當前方法參數(shù)的值應該從請求體中獲取,并且需要指定 value 屬性來指示請求體應該映射到哪個參數(shù)上
  1. 定義一個用來接收json數(shù)據(jù)的實體類
public class Person {
  private String name;
  private int age;
  private String gender;
  // getter 和 setter 略
}
  1. 前端發(fā)送 JSON 數(shù)據(jù)的示例:(使用postman測試)
{
  "name": "張三",
  "age": 18,
  "gender": "男"
}
  1. 在控制器中,使用 @RequestBody 注解來接收 JSON 數(shù)據(jù),并將其轉(zhuǎn)換為 Java 對象:
@PostMapping("/person")
@ResponseBody
public String addPerson(@RequestBody Person person) {

 // 在這里可以使用 person 對象來操作 JSON 數(shù)據(jù)中包含的屬性
 return "success";
}

Java原生只支持param傳參和路徑傳參 , json是前端定義的格式 .因此需要做兩件事.
a. 導入json依賴
b.handlerAdapter配置json轉(zhuǎn)化器(即在config類上增加@EnableWebMvc)

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>

此時運行程序 , 可以接收到傳來的json。


插播一條@EnableWebMvc注解:

原本,MvcConfig類中,我們需要重寫handlerMapping,handlerAdapter兩個方法,上例中又加入了一個新需求即配置一個json轉(zhuǎn)化器。然而這一切只需要MvcConfig上聲明一個@EnableWebMvc注解即可實現(xiàn)。


1.2.4 路徑參數(shù)接收(動態(tài)傳參)

先理解是什么:

http://localhost:8080/user/login?account=root&password=12345
||
http://localhost:8080/user/root/12345
即將每個參數(shù)視為路徑 , 這就是路徑傳參
  • 路徑傳遞參數(shù)是一種在 URL 路徑中傳遞參數(shù)的方式。在 RESTful 的 Web應用程序中,經(jīng)常使用路徑傳遞參數(shù)來表示資源的唯一標識符或更復雜的表示方式。
  • Spring MVC 框架提供了 @PathVariable 注解來處理路徑傳遞參數(shù) , 該注解允許將 URL 中的占位符映射到控制器方法中的參數(shù)。

例如,如果我們想將 /user/{id} 路徑下的 {id} 映射到控制器方法的一個參數(shù)中,則可以使用 @PathVariable 注解來實現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-792842.html

 /**
 * 動態(tài)路徑設計: /user/{動態(tài)部分}/{動態(tài)部分}   動態(tài)部分使用{}包含即可! {}內(nèi)部動態(tài)標識!
 * 形參列表取值: @PathVariable Long id  如果形參名 = {動態(tài)標識} 自動賦值!
 *              @PathVariable("動態(tài)標識") Long id  如果形參名 != {動態(tài)標識} 可以通過指定動態(tài)標識賦值!
 *              和RequestParama一樣 , 通過value屬性綁定兩個屬性(@PathVariable(value="stuAge") int age)
 */
 //動態(tài)路徑設計, 可在形參列表獲取傳入的參數(shù)
@GetMapping("/user/{id}/{name}")
@ResponseBody
//形參列表獲取參數(shù), 分別傳入上頭的GetMapping和下面的方法
public String getUser(@PathVariable Long id, 
                      @PathVariable("name") String uname) {
    System.out.println("id = " + id + ", uname = " + uname);
    return "user_detail";
}
//訪問測試:  /param/user/1/root 可得結果: id = 1  uname = root

到了這里,關于02 SpringMVC接收數(shù)據(jù)之訪問路徑設置+四種接參方式+@EnableWebMvc的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • SpringMVC參數(shù)接收見解4

    SpringMVC參數(shù)接收見解4

    Springmvc中,接收頁面提交的數(shù)據(jù)是通過方法形參來接收: 處理器適配器調(diào)用springmvc使用反射將前端提交的參數(shù)傳遞給controller方法的形參 springmvc接收的參數(shù)都是String類型,所以spirngmvc提供了很多converter(轉(zhuǎn)換器)在特殊情況下需要自定義converter,如對日期數(shù)據(jù) 編寫controller 在

    2024年01月19日
    瀏覽(15)
  • SpringMVC接收參數(shù)

    Springmvc中,接收頁面提交的數(shù)據(jù)是通過方法形參來接收: 處理器適配器調(diào)用springmvc使用反射將前端提交的參數(shù)傳遞給controller方法的形參 springmvc接收的參數(shù)都是String類型,所以spirngmvc提供了很多converter(轉(zhuǎn)換器)在特殊情況下需要自定義converter,如對日期數(shù)據(jù) 編寫controller 在

    2024年01月19日
    瀏覽(19)
  • SpringMVC相對路徑和絕對路徑

    SpringMVC相對路徑和絕對路徑

    點擊index.jsp頁面請求前,地址欄網(wǎng)址為 代碼展示

    2024年02月09日
    瀏覽(21)
  • 【JavaEE】SpringMVC_day02

    【JavaEE】SpringMVC_day02

    今日內(nèi)容 完成SSM的整合開發(fā) 能夠理解并實現(xiàn)統(tǒng)一結果封裝與統(tǒng)一異常處理 能夠完成前后臺功能整合開發(fā) 掌握攔截器的編寫 前面我們已經(jīng)把 Mybatis 、 Spring 和 SpringMVC 三個框架進行了學習,今天主要的內(nèi)容就是把這三個框架整合在一起完成我們的業(yè)務功能開發(fā),具體如何來整

    2023年04月26日
    瀏覽(18)
  • springmvc 獲取項目中的所有請求路徑

    springboot/springmvc 獲取項目中的所有請求路徑 1. 編寫業(yè)務代碼 2. 異常信息 No qualifying bean of type ‘org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping’ available: expected single matching bean but found 3: swagger2ControllerMapping,requestMappingHandlerMapping,controllerEndpointHandlerMapping 原因就

    2024年02月09日
    瀏覽(19)
  • Nginx域名重定向(如何訪問的域名和實際的數(shù)據(jù)請求路徑不同,可解決前端跨域)

    Nginx域名重定向(如何訪問的域名和實際的數(shù)據(jù)請求路徑不同,可解決前端跨域)

    感情需要被抑制,不能泛濫… 當需要將一個域名重定向到另一個域名并且用戶仍然看到原始域名時,Nginx是一個強大的工具。這種場景通常涉及到反向代理或重寫URL的技巧。在本篇博客中,我們將詳細介紹如何使用Nginx來實現(xiàn)這個目標,以及提供多個示例。 背景 假設您有兩個

    2024年02月06日
    瀏覽(36)
  • JAVA 的四種訪問權限

    JAVA 的四種訪問權限

    在Java編程中,訪問權限是非常重要的概念,因為它可以保證代碼的安全性和封裝性。訪問權限有四種,分別是public、protected、default和private。 private :如果一個類的方法或者變量被 private 修飾,那么這個類的方法或者變量只能在該類本身中被訪問,在類外以及其他類中都不能

    2024年02月09日
    瀏覽(26)
  • java的四種訪問權限

    1、public: 所修飾的類、變量、方法,在內(nèi)外包均具有訪問權限,Public (公有) 訪問權限較為寬松的一種,不僅可以被跨類訪問,而且可以跨包訪問。 2、protected: 這種權限是為繼承而設計的,protected所修飾的成員,對所有子類是可訪問的,但只對同包的類是可訪問的,對外

    2024年02月15日
    瀏覽(20)
  • 【SpringMVC篇】探索請求映射路徑,Get請求與Post請求

    【SpringMVC篇】探索請求映射路徑,Get請求與Post請求

    ??專欄【SpringMVC】 ??喜歡的詩句:天行健,君子以自強不息。 ??音樂分享【如愿】 ??歡迎并且感謝大家指出小吉的問題?? 請求映射是SpringMVC框架進行請求調(diào)度的重要基礎。通過請求映射,SpringMVC可以將不同的請求映射到指定的控制器進行處理。所以學習使用請求映射是精

    2024年02月08日
    瀏覽(20)
  • 遠程xml讀取解析,將image url下載到本地,延時隊列定時刪除文件,圖片訪問路徑保存在數(shù)據(jù)庫中

    遠程xml讀取解析,將image url下載到本地,延時隊列定時刪除文件,圖片訪問路徑保存在數(shù)據(jù)庫中

    遠程xml部分內(nèi)容 mq發(fā)布端定時任務發(fā)送消息 mq消費端 1,遠程xml讀取 2,xml解析,將image中圖片url保存在集合中 3,遍歷集合,當本地不存在此圖片時,下載圖片至本地 4,將圖片路徑傳給延時隊列,用于稍后刪除圖片 5,保存自定義圖片訪問路徑等信息到數(shù)據(jù)庫 XMLUtil讀取遠程

    2024年02月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包