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

Spring MVC 處理Ajax請求的方式詳解

 更新時(shí)間:2024年09月29日 11:35:48   作者:Miaow.Y.Hu  
本文介紹了在SpringMVC中處理Ajax請求的方法,主要依賴于Controller和返回類型的配置,使用@RequestMapping注解處理Ajax的控制器方法,本文給大家介紹Spring MVC 處理Ajax請求的方式,感興趣的朋友跟隨小編一起看看吧

在Spring MVC中我們通常處理Ajax的方式主要依賴于控制器(Controller)和返回類型的配置。

使用@RequestMapping注解

在Spring MVC中,可以使用@RequestMapping中注解處理Ajax中的控制器方法。通常,Ajax 請求會(huì)使用 GET 或 POST 方法。

import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/data")
    public ResponseEntity<MyData> getData() {
        MyData data = new MyData(); // 創(chuàng)建數(shù)據(jù)對象
        return ResponseEntity.ok(data); // 返回?cái)?shù)據(jù)
    }
    @PostMapping("/data")
    public ResponseEntity<String> postData(@RequestBody MyData data) {
        // 處理接收到的數(shù)據(jù)
        return ResponseEntity.ok("Data received successfully");
    }
}

@RequestBody

@RequestBody可以獲取請求體信息,使用@RequestBody注解標(biāo)識(shí)控制器方法的形參,當(dāng)前請求的請求體就會(huì)為當(dāng)前注解所標(biāo)識(shí)的形參賦值

<!--此時(shí)必須使用post請求方式,因?yàn)間et請求沒有請求體-->
<form th:action="@{/test/RequestBody}" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    <input type="submit">
</form>
@RequestMapping("/test/RequestBody")
public String testRequestBody(@RequestBody String requestBody){
    System.out.println("requestBody:"+requestBody);
    return "success";
}

前端發(fā)送請求:

/* 方式一
axios({
    method: 'get',  // 請求方式,以name = value & name = value的形式傳遞參數(shù)不管傳遞的方式是get還是post,請求參數(shù)都會(huì)被拼接到請求地址后。
          此種方式的請求參數(shù)可以通過request.getParameter()獲取
    url: ‘', //請求路徑,
    params: {
       username: 'admin',  //以這種json方式發(fā)送的請求參數(shù),請求參數(shù)被放在請求體中,并傳輸?shù)椒?wù)器,這種方式傳值,是沒法被request.getParameter()獲取的
       password: '123456'
       }
}).then(function (response) {
      console.log(response);
      vm.msg = response.data;
    }
*/
/* axios的請求格式
 * 請求方式:
* 1. axios.get()
* 2. axios.post()
* 3. axios.put()
* 4. axios.delete()
* 5. axios.head()
* 6. axios.options()
* 7. axios.patch()
* 8. axios.request()
//方式二
  axios.get("/test/RequestBody").then(function (response) {
      console.log(response);
      vm.msg = response.data;
      });
     },
*/
      /*
      * 請求體的格式
      * 1. 使用url傳遞參數(shù)
      * 2. 使用json傳遞參數(shù)
      */

RequestBody獲取json格式的請求參數(shù)

在使用了axios發(fā)送ajax請求之后,瀏覽器發(fā)送到服務(wù)器的請求參數(shù)有兩種格式:

1、name=value&name=value...,此時(shí)的請求參數(shù)可以通過request.getParameter()獲取,對應(yīng)SpringMVC中,可以直接通過控制器方法的形參獲取此類請求參數(shù)

2、{key:value,key:value,...},此時(shí)無法通過request.getParameter()獲取,之前我們使用操作json的相關(guān)jar包gson或jackson處理此類請求參數(shù),可以將其轉(zhuǎn)換為指定的實(shí)體類對象或map集合。在SpringMVC中,直接使用@RequestBody注解標(biāo)識(shí)控制器方法的形參即可將此類請求參數(shù)轉(zhuǎn)換為java對象

使用@RequestBody獲取json格式的請求參數(shù)的條件:
導(dǎo)入jackson的依賴

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

Spring MVC的配置文件中設(shè)置開啟MVC注解驅(qū)動(dòng)

<!--開啟mvc的注解驅(qū)動(dòng)-->
<mvc:annotation-driven />

在控制器方法的形參位置,設(shè)置json格式的請求參數(shù)要轉(zhuǎn)換成的java類型(實(shí)體類或map)的參數(shù),并使用@RequestBody注解標(biāo)識(shí)

<input type="button" value="測試@RequestBody獲取json格式的請求參數(shù)"@click="testRequestBody()">
<script type="text/javascript" th:src="@{/js/vue.js}"></script>
<script type="text/javascript" th:src="@{/js/axios.min.js}"></script>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        methods:{
            testRequestBody(){
                axios.post(
                    "/SpringMVC/test/RequestBody/json",
                    {username:"admin",password:"123456"}
                ).then(response=>{
                    console.log(response.data);
                });
            }
        }
    });
</script>
//將json格式的數(shù)據(jù)轉(zhuǎn)換為map集合
@RequestMapping("/test/RequestBody/json")
public void testRequestBody(@RequestBody Map<String, Object> map,HttpServletResponse response) throws IOException {
    System.out.println(map);
    //{username=admin, password=123456}
    response.getWriter().print("hello,axios");
}
//將json格式的數(shù)據(jù)轉(zhuǎn)換為實(shí)體類對象
@RequestMapping("/test/RequestBody/json")
public void testRequestBody(@RequestBody User user, HttpServletResponseresponse) throws IOException {
    System.out.println(user);
    //User{id=null, username='admin', password='123456', age=null,gender='null'}
	response.getWriter().print("hello,axios");
}

@RequestBody

@ResponseBody用于標(biāo)識(shí)一個(gè)控制器方法,可以將該方法的返回值直接作為響應(yīng)報(bào)文的響應(yīng)體響應(yīng)到瀏覽器

@RequestMapping("/testResponseBody")
public String testResponseBody(){
    //此時(shí)會(huì)跳轉(zhuǎn)到邏輯視圖success所對應(yīng)的頁面
    return "success";
}
@RequestMapping("/testResponseBody")
@ResponseBody
public String testResponseBody(){
    //此時(shí)響應(yīng)瀏覽器數(shù)據(jù)success
    return "success";
}

RequestBody響應(yīng)瀏覽器json數(shù)據(jù)

服務(wù)器處理ajax請求之后,大多數(shù)情況都需要向?yàn)g覽器響應(yīng)一個(gè)java對象,此時(shí)必須將java對象轉(zhuǎn)換為json字符串才可以響應(yīng)到瀏覽器,之前我們使用操作json數(shù)據(jù)的jar包gson或jackson將java對象轉(zhuǎn)換為json字符串。在SpringMVC中,我們可以直接使用@ResponseBody注解實(shí)現(xiàn)此功能。

@ResponseBody響應(yīng)瀏覽器json數(shù)據(jù)的條件:
1、導(dǎo)入jackson的依賴

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

2、SpringMVC的配置文件中設(shè)置開啟mvc的注解驅(qū)動(dòng)

<!--開啟mvc的注解驅(qū)動(dòng)-->
<mvc:annotation-driven />

3、使用@ResponseBody注解標(biāo)識(shí)控制器方法,在方法中,將需要轉(zhuǎn)換為json字符串并響應(yīng)到瀏覽器的java對象作為控制器方法的返回值,此時(shí)SpringMVC就可以將此對象直接轉(zhuǎn)換為json字符串并響應(yīng)到瀏覽器。

<input type="button" value="測試@ResponseBody響應(yīng)瀏覽器json格式的數(shù)據(jù)"@click="testResponseBody()"><br>
<script type="text/javascript" th:src="@{/js/vue.js}"></script>
<script type="text/javascript" th:src="@{/js/axios.min.js}"></script>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        methods:{
            testResponseBody(){
                axios.post("/SpringMVC/test/ResponseBody/json").then(response=>{
                    console.log(response.data);
                });
            }
        }
    });
</script>
//響應(yīng)瀏覽器list集合
@RequestMapping("/test/ResponseBody/json")
@ResponseBody
public List<User> testResponseBody(){
    User user1 = new User(1001,"admin1","123456",23,"男");
    User user2 = new User(1002,"admin2","123456",23,"男");
    User user3 = new User(1003,"admin3","123456",23,"男");
    List<User> list = Arrays.asList(user1, user2, user3);
    return list;
}
//響應(yīng)瀏覽器map集合
@RequestMapping("/test/ResponseBody/json")
@ResponseBody
public Map<String, Object> testResponseBody(){
    User user1 = new User(1001,"admin1","123456",23,"男");
    User user2 = new User(1002,"admin2","123456",23,"男");
    User user3 = new User(1003,"admin3","123456",23,"男");
    Map<String, Object> map = new HashMap<>();
    map.put("1001", user1);
    map.put("1002", user2);
    map.put("1003", user3);
    return map;
}
//響應(yīng)瀏覽器實(shí)體類對象
@RequestMapping("/test/ResponseBody/json")
@ResponseBody
public User testResponseBody(){
    return user;
}

使用 @RestController

使用 @RestController 注解可以簡化控制器的定義。這個(gè)注解是 @Controller@ResponseBody 的組合,表示該控制器中的所有方法都返回 JSON 或 XML 格式的數(shù)據(jù),而不是視圖。

到此這篇關(guān)于Spring MVC 處理Ajax請求的方式的文章就介紹到這了,更多相關(guān)Spring MVC 處理Ajax請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 中DateUtils日期工具類的實(shí)例詳解

    Java 中DateUtils日期工具類的實(shí)例詳解

    這篇文章主要介紹了Java 中DateUtils日期工具類的實(shí)例詳解的相關(guān)資料,有時(shí)候開發(fā)java項(xiàng)目使用日期類型,這里介紹下日期工具類,需要的朋友可以參考下
    2017-08-08
  • JDK1.6集合框架bug 6260652解析

    JDK1.6集合框架bug 6260652解析

    這篇文章主要為大家解析了JDK1.6集合框架bug:c.toArray might (incorrectly) not return Object[] (see 6260652),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • MyBatis注解式開發(fā)映射語句詳解

    MyBatis注解式開發(fā)映射語句詳解

    這幾年來注解開發(fā)越來越流行,Mybatis也可以使用注解開發(fā)方式,這樣我們就可以減少編寫Mapper映射文件了。我們先圍繞一些基本的CRUD來學(xué)習(xí),再學(xué)習(xí)復(fù)雜映射多表操作
    2023-02-02
  • Java中線程狀態(tài)+線程安全問題+synchronized的用法詳解

    Java中線程狀態(tài)+線程安全問題+synchronized的用法詳解

    這篇文章主要介紹了Java中線程狀態(tài)+線程安全問題+synchronized的用法詳解,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • springboot項(xiàng)目中沒有識(shí)別到y(tǒng)ml文件解決辦法

    springboot項(xiàng)目中沒有識(shí)別到y(tǒng)ml文件解決辦法

    這篇文章主要給大家介紹了springboot項(xiàng)目中沒有識(shí)別到y(tǒng)ml文件解決辦法,文中通過代碼示例給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 解決Feign切換client到okhttp無法生效的坑(出現(xiàn)原因說明)

    解決Feign切換client到okhttp無法生效的坑(出現(xiàn)原因說明)

    這篇文章主要介紹了解決Feign切換client到okhttp無法生效的坑(出現(xiàn)原因說明),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java使用PDFBox實(shí)現(xiàn)調(diào)整PDF每頁格式

    Java使用PDFBox實(shí)現(xiàn)調(diào)整PDF每頁格式

    這篇文章主要為大家詳細(xì)介紹了Java如何使用PDFBox實(shí)現(xiàn)調(diào)整PDF每頁格式,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-03-03
  • MyBatis插入數(shù)據(jù)返回主鍵的介紹

    MyBatis插入數(shù)據(jù)返回主鍵的介紹

    今天小編就為大家分享一篇關(guān)于MyBatis插入數(shù)據(jù)返回主鍵的介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java獲取泛型實(shí)際類型的方法詳解

    Java獲取泛型實(shí)際類型的方法詳解

    這篇文章主要介紹了Java獲取泛型實(shí)際類型的方法詳解,泛型,即“參數(shù)化類型”,一提到參數(shù),最熟悉的就是定義方法時(shí)有形參列表,普通方法的形參列表中,每個(gè)形參的數(shù)據(jù)類型是確定的,而變量是一個(gè)參數(shù),需要的朋友可以參考下
    2023-11-11
  • Spring Data JPA實(shí)現(xiàn)動(dòng)態(tài)查詢的兩種方法

    Spring Data JPA實(shí)現(xiàn)動(dòng)態(tài)查詢的兩種方法

    本篇文章主要介紹了Spring Data JPA實(shí)現(xiàn)動(dòng)態(tài)查詢的兩種方法,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04

最新評(píng)論