女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony:使用網絡組件axios與Spring Boot進行前后端交互

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-22 17:35 ? 次閱讀

流程圖:

image.png

一、簡單的交互

前端請求函數

firstGet(): Promise< AxiosResponse >{
    return axios.get('http://192.168.211.1:8090/test/1');
}
getAaddB(a: number, b: number): Promise< AxiosResponse >{
   return axios.get('http://192.168.211.1:8090/test/2', {
      params: {
        a: a,
        b: b
      }
   })
}

這兩個函數是使用axios庫發起HTTP GET請求的函數,用于與服務器進行通信

  • 服務器端點: http://192.168.211.1:8090/test/1 這是我本機的ip地址和springboot運行端口,使用在windows終端輸入ipconfig可查看
  • 返回值: 該函數返回一個Promise,該Promise在請求成功時將包含AxiosResponse對象,其中包含了從服務器接收到的響應信息。

后端controller

package com.example.demospring.controller;
import org.springframework.web.bind.annotation.*;
@RequestMapping("/test")
@RestController
public class test1 {
    @GetMapping("/1")
    public String test11(){
        return "這是axios發送get請求從后端獲取的數據";
    }   
    @GetMapping("/2")
    public int AB(@RequestParam int a, @RequestParam int b){
        return a + b;
    }
}

test1()方法:

  • 功能: 當接收到GET請求 /test/1 時,該方法返回一個字符串 “這是axios發送get請求從后端獲取的數據”。
  • 備注: 這是一個簡單的用于演示GET請求的方法,返回字符串數據。

二、axios與Spring Boot進行前后端交互的實現

一、前后端交互配置

  • Arkts目錄結構

image.png

前端axios封裝一個簡單的網絡請求 在src/main/ets/network/AxiosRequest.ets里

import axios, { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from '@ohos/axios' // 公共請求前綴 axios.defaults.baseURL = "http://192.168.211.1:8090" // 添加請求攔截器... // 添加響應攔截器... // 導出 export default axios; export {AxiosResponse}

  • 后端用于配置跨域資源共享(CORS)的設置 登錄后復制 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 映射的路徑,這里是所有路徑 .allowedOrigins(" ") // 允許的來源,這里是所有來源,可以設置具體的域名或 IP 地址 .allowedMethods("PUT", "GET", "POST", "DELETE") // 允許的 HTTP 方法 .allowedHeaders(" ") // 允許的 HTTP 頭部 .allowCredentials(false) // 是否支持用戶憑據,這里是不支持 .maxAge(300); // 預檢請求的有效期,單位秒 } @RequestMapping("/hello"):這個注解用于類級別,表示所有在這個控制器中的方法的URL映射的基本路徑 登錄后復制 @RestController @RequestMapping("/hello") public class SumUpController { ... }

二、不同請求的參數傳遞與后端接收返回代碼

1.get請求獲取數據

axios請求

export function get1(): Promise< AxiosResponse > {
  return axios.get('/hello/get1');
}

后端controller

@GetMapping("/get1")
public String get1(){
    return "這是你拿到的數據";
}

2.get請求傳遞多個參數

axios請求

export function get2(a: number, b: number): Promise< AxiosResponse > {
  return axios.get('/hello/get2', {
    //params字段包含了將要發送到后端的參數。
    params: {
      a: a,
      b: b
    }
  });
}

后端controller

@GetMapping("/get2")
 //使用@RequestParam注解從URL中獲取參數a和b。
 public String get2(@RequestParam int a, @RequestParam int b){
    return "你傳的兩個數是" + a + " " + b;
 }

@RequestParam 注解允許你自定義請求參數的名稱,并提供其他選項,如設置默認值或將參數標記為必需

3.get請求路徑參數

axios請求

export function get3(ps: number, pn: number): Promise< AxiosResponse > {
  //注意要用``(反引號)
  return axios.get(`/hello/get3/${pn}/${ps}`);
}

后端controller

@GetMapping("/get3/{pn}/{ps}")
public String get3(@PathVariable("ps") int ps, @PathVariable("pn") int pn){
    return "你的查找要求是一頁" + ps + "條數據的第" +  pn + "頁";
}

@PathVariable("id") 表示要從路徑中提取一個名為 “id” 的變量,并將其值綁定到 itemId 參數上。

4.get請求返回JSON數據

axios請求

//定義請求接收的數據類型
export interface ResponseData {
  status: string;
  message: string;
}
export function get4(): Promise< AxiosResponse< ResponseData > > {
  return axios.get('/hello/get4');
}

Promise> 表示一個 Promise 對象,該對象最終解決為 Axios 發起的 HTTP 請求的響應,而該響應的數據體應該符合 ResponseData 類型的結構。

后端controller

//@Data注解一個類時,Lombok會自動為該類生成常見的方法,如toString()、equals(),以及所有字段的getter和setter方法。
@Data
public static class ResponseData {
    private String status;
    private String message;
}
@GetMapping("/get4")
public ResponseData get4() {
    ResponseData responseData = new ResponseData();
    responseData.setStatus("success");
    responseData.setMessage("這是一條成功的消息。");
    return responseData;
}

5.post 使用對象作為請求參數

axios請求

export function post1(person: { name: string, age: number }): Promise< AxiosResponse > {
  return axios.post(`/hello/post1`, person);
}

后端controller

@Data
public static class Person {
    private String name;
    private int age;
}
@PostMapping("/post1")
public String post1(@RequestBody Person person) {
    return "你傳的姓名: " + person.getName() + " 年齡: " + person.getAge() + "。";
}

6.post 使用Map接收JSON數據

axios請求

//JSON中,鍵和字符串值都應該被雙引號包圍如
export function post2(data: any): Promise< AxiosResponse > {
  return axios.post(`/hello/post2`, data);
}

后端controller

@PostMapping("/post2")
public String post2(@RequestBody Map< String, String > mp) {
    AtomicReference< String > data = new AtomicReference<  >("");
    mp.forEach((k, v) - >{
        data.set(data + k);
        data.set(data + ": ");
        data.set(data + v + ",");
    });
    return "你傳的鍵值對是: " + data;
}

7.put請求

axios請求

export function putExample(data: string): Promise< AxiosResponse > {
  return axios.put('/hello/putExample', {data: data});
}

后端controller

@PutMapping("/putExample")
public String putExample(@RequestBody String data) {
    return "這是PUT請求,傳入的數據是: " + data;
}

8.delete請求

axios請求

export function deleteExample(id: number): Promise< AxiosResponse > {
  return axios.delete(`/hello/deleteExample/${id}`);
}

后端controller

@DeleteMapping("/deleteExample/{id}")
public String deleteExample(@PathVariable("id") int id) {
    return "這是DELETE請求,要刪除的數據ID是: " + id;
}

三、調用傳參

import router from '@ohos.router'
import {get1, get2, get3, get4, post1, post2, putExample, deleteExample} from '../network/api/TestApi'
@Entry
@Component
struct Index {
  @State get1: string = "";
  @State get2: number = undefined;
  @State get3: number = undefined;
  @State get4: {status: string, message: string} = null;
  @State post1: string = "";
  @State post2: string = "";
  @State put: string = "";
  @State delete: string = "";
  build() {
    Column() {
      Button("get1-get請求獲取數據")
        .onClick(async () = >{
          this.get1 = (await get1()).data;
        })
      Text(this.get1)
        .fontSize(20)
      Button("get2-傳遞多個參數")
        .onClick(async () = >{
          this.get2 = (await get2(1, 3)).data;
        })
      Text(`${this.get2!=undefined?this.get2:""}`)
        .fontSize(20)
      Button("get3-路徑參數")
        .onClick(async () = >{
          this.get3 = (await get3(3, 4)).data;
        })
      Text(`${this.get3!=undefined?this.get3:""}`)
        .fontSize(20)
      Button("get4-返回JSON數據")
        .onClick(async () = >{
          this.get4 = (await get4()).data;
        })
      Text(this.get4!=null ? JSON.stringify(this.get4) : "")
        .fontSize(20)

      Button("post1-使用對象作為請求參數")
        .onClick(async () = >{
          this.post1 = (await post1({name: "張三", age: 18})).data;
        })
      Text(this.post1)
        .fontSize(20)

      Button("post2-使用Map接收JSON數據的POST請求示例")
        .onClick(async () = >{
          this.post2 = (await post2({id: "1", name: "李四", status: "call"})).data;
        })
      Text(this.post2)
        .fontSize(20)

      Button("put請求")
        .onClick(async () = >{
          this.put = (await putExample("put data")).data;
        })
      Text(this.put)
        .fontSize(20)

      Button("delete請求")
        .onClick(async () = >{
          this.delete = (await deleteExample(10)).data;
        })
      Text(this.delete)
        .fontSize(20)
      Button("對一個表單的增刪改查")
        .margin(20)
        .onClick(() = >{
          router.pushUrl({
            url: "pages/TalentTableTest"
          })
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

以上就是鴻蒙開發的OpenHarmony;使用網絡組件axios與Spring Boot進行前后端交互的技術解析,更多有關鴻蒙開發的學習,可以去主頁查找,找我保存技術文檔。下面分享一張OpenHarmony學習路線圖

高清完整版曲線圖,可以找我保存 (附鴻蒙4.0&next版文檔)如下:

四、總結

一、請求參數錯誤的常見情況:

  1. 參數名稱不一致
  2. 參數類型(格式)不一致
  3. 缺少必須的請求參數
  4. 請求頭信息不符合要求

二、不同請求方式與參數傳遞方式的對應關系:

  1. RESTful風格的API通常使用路徑變量傳遞參數。在Spring框架中,可以使用@PathVariable注解來接收這些參數。
  2. URL中使用params傳遞參數時,通常使用@RequestParam注解來接收參數。
  3. 當客戶端通過請求體傳遞JSON數據時,可以使用@RequestBody注解來接收。
  4. @ModelAttribute用于綁定方法參數或方法返回值到模型中,通常用于將請求參數與模型屬性進行綁定。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    7082

    瀏覽量

    124943
  • 鴻蒙
    +關注

    關注

    59

    文章

    2508

    瀏覽量

    43769
  • OpenHarmony
    +關注

    關注

    26

    文章

    3824

    瀏覽量

    18141
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    DialogHub上線OpenHarmony開源社區,高效開發鴻蒙應用彈窗

    作為鴻蒙應用開發者,在使用ArkUI現有能力進行彈窗開發時,總會遇到一些讓人糾結的交互問題:應用內進行消息提示時,既要求消息內容支持圖文混排,又要求彈窗本身不能打斷用戶交互(頁面滑動、
    發表于 04-03 17:30

    ADS9254變壓器后端匹配網絡怎么設計比較好?

    請問目前我用ADS9254的芯片 模擬端怎么處理比較好,我看開發板使用的是一對變壓器實現的,目前實際應用中單端模擬信號中頻為45M,是否一個變壓器就可以,另外變壓器后端匹配網絡怎么設計比較好?有沒有可供參考的電路?謝謝!
    發表于 01-22 06:02

    如何使用Java語言快速開發一套智慧工地系統(源碼)

    系統的可擴展性和靈活性。 前后端分離:前端使用Vue或UniApp進行開發,后端基于Spring Boot,確保快速響應和良好的用戶體驗。
    的頭像 發表于 01-09 17:39 ?619次閱讀

    校園點餐訂餐外賣跑腿Java源碼

    創建一個校園點餐訂餐外賣跑腿系統是一個復雜的項目,涉及到前端、后端、數據庫設計等多個方面。在這里,我可以提供一個簡化的Java后端示例,使用Spring Boot框架來搭建一個基本的A
    的頭像 發表于 12-24 14:55 ?520次閱讀
    校園點餐訂餐外賣跑腿Java源碼

    SSM開發環境的搭建教程 SSM與Spring Boot的區別

    SSM開發環境的搭建教程 SSM(Spring+SpringMVC+MyBatis)開發環境的搭建涉及多個步驟,以下是詳細的教程: 創建Maven項目 : 使用Maven工具創建一個新的Maven
    的頭像 發表于 12-16 18:13 ?1239次閱讀

    Spring 應用合并之路(二):峰回路轉,柳暗花明

    提醒下,決定拋開 Spring Boot 內置的父子容器方案,完全自己實現父子容器。 如何加載 web 項目? 現在的難題只有一個:如何加載 web 項目?加載完成后,如何持續持有 web 項目?經過思考后,可以創建一個 boot
    的頭像 發表于 12-12 11:22 ?1080次閱讀

    eBPF技術實踐之virtio-net網卡隊列可觀測

    時,這一路徑難以進行觀測。一些復雜的網絡抖動問題很可能是由于網卡隊列不正常工作引起的。為了解決這類問題,我們基于eBPF技術擴展了網卡隊列的可觀測能力,使得virtio網卡前后端的定界問題不再困擾。 virtio-net
    的頭像 發表于 11-14 11:18 ?597次閱讀
    eBPF技術實踐之virtio-net網卡隊列可觀測

    Spring事務實現原理

    作者:京東零售 范錫軍 1、引言 springspring-tx模塊提供了對事務管理支持,使用spring事務可以讓我們從復雜的事務處理中得到解脫,無需要去處理獲得連接、關閉連接、事務提交和回滾等
    的頭像 發表于 11-08 10:10 ?1107次閱讀
    <b class='flag-5'>Spring</b>事務實現原理

    AD620對光電二極管的信號來進行前置放大作用,如何對輸入端進行處理?

    我們使用的是AD620對光電二極管的信號來進行前置放大作用,但是不知道如何對輸入端進行處理。
    發表于 09-18 07:32

    基于ArkTS語言的OpenHarmony APP應用開發:簡易計數器

    1、程序簡介 該程序是基于OpenHarmony標準系統編寫的UI應用類:Sample Counter(簡單計數器)。 該程序設計1個按鈕和顯示框。當每次按下按鈕,則顯示框數字累加1。 本案
    發表于 09-14 13:38

    Spring Cloud Gateway網關框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 進行構建
    的頭像 發表于 08-22 09:58 ?679次閱讀
    <b class='flag-5'>Spring</b> Cloud Gateway網關框架

    單片機boot0和boot1怎么設置

    單片機Boot0和Boot1簡介 Boot0和Boot1是單片機啟動模式選擇引腳,用于選擇單片機的啟動模式。 Boot0和
    的頭像 發表于 08-22 09:50 ?5188次閱讀

    前后端數據傳輸約定探討

    1 目的 穩定可靠,降本增效 ? 前后端數據傳輸約定旨在提升系統穩定性、可靠性,降低線上線下bug率;并提升研發效率、降低溝通成本、降低延期率。是確保項目前端和后端開發順利進行的重要規約之一,定義了
    的頭像 發表于 07-08 19:10 ?432次閱讀
    <b class='flag-5'>前后端</b>數據傳輸約定探討

    OpenHarmony之開機優化

    對其進行詳細的性能分析,從而優化系統啟動速度和運行效率。 三丶開機優化 開機優化的主要目的是為了快速啟動開機動畫和退出開機動畫(顯示桌面)。所以在優化之前,我們需要了解一下OpenHarmony系統中
    發表于 07-01 16:39

    UWB室內外高精度一體化融合定位系統源碼 UWB技術定位系統應用場景 Java+Spring boot+MYSQL?技術開發

    UWB室內外高精度一體化融合定位系統源碼 UWB技術定位系統應用場景 Java+Spring boot+MYSQL?技術開發 系統聚焦基于UWB(超寬帶)技術的底層定位網絡和定位算法,通過對定位分站
    的頭像 發表于 06-18 10:46 ?741次閱讀
    UWB室內外高精度一體化融合定位系統源碼 UWB技術定位系統應用場景 Java+<b class='flag-5'>Spring</b> <b class='flag-5'>boot</b>+MYSQL?技術開發