国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

河南鄭州網(wǎng)站推廣優(yōu)化淘寶優(yōu)化關(guān)鍵詞的步驟

河南鄭州網(wǎng)站推廣優(yōu)化,淘寶優(yōu)化關(guān)鍵詞的步驟,什么是b2b銷售模式,江蘇省住房與城鄉(xiāng)建設(shè)部網(wǎng)站前言(SpringBoot程序請(qǐng)求響應(yīng)流程) 以上一章的程序?yàn)槔?amp;#xff0c;一個(gè)基于SpringBoot的方式開(kāi)發(fā)一個(gè)web應(yīng)用,瀏覽器發(fā)起請(qǐng)求 /hello 后 ,給瀏覽器返回字符串 “Hello World ~”。 而我們?cè)陂_(kāi)發(fā)web程序時(shí)呢,定義了一…

前言(SpringBoot程序請(qǐng)求響應(yīng)流程)

以上一章的程序?yàn)槔?#xff0c;一個(gè)基于SpringBoot的方式開(kāi)發(fā)一個(gè)web應(yīng)用,瀏覽器發(fā)起請(qǐng)求 /hello 后 ,給瀏覽器返回字符串 “Hello World ~”。

而我們?cè)陂_(kāi)發(fā)web程序時(shí)呢,定義了一個(gè)控制器類Controller,請(qǐng)求會(huì)被部署在Tomcat中的Controller接收,然后Controller再給瀏覽器一個(gè)響應(yīng),響應(yīng)一個(gè)字符在瀏覽器發(fā)起請(qǐng)求,請(qǐng)求了我們的后端web服務(wù)器(也就是內(nèi)置串 “Hello World”。 而在請(qǐng)求響應(yīng)的過(guò)程中是遵循HTTP協(xié)議的。

但是在Tomcat這類Web服務(wù)器中,是不識(shí)別我們自己定義的Controller的。而Tomcat是一個(gè)Servlet容器,支持Serlvet規(guī)范,因此在tomcat中是可以識(shí)別 Servlet程序的。

  • Servlet(服務(wù)器小程序)是一種運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的 Java 程序,用于處理客戶端(如瀏覽器)發(fā)送的 HTTP 請(qǐng)求并生成響應(yīng)。它是 Java Web 開(kāi)發(fā)的核心組件之一,遵循 Java Servlet API 規(guī)范。
  • 簡(jiǎn)單來(lái)說(shuō),當(dāng)用戶通過(guò)瀏覽器訪問(wèn)一個(gè)網(wǎng)站時(shí),瀏覽器會(huì)發(fā)送 HTTP 請(qǐng)求到 Web 服務(wù)器,服務(wù)器中的 Servlet 程序就會(huì)接收并處理這些請(qǐng)求,比如獲取用戶請(qǐng)求的頁(yè)面內(nèi)容、處理用戶提交的表單數(shù)據(jù)等,然后生成一個(gè)響應(yīng)返回給瀏覽器,這個(gè)響應(yīng)可以是 HTML 頁(yè)面、XML 數(shù)據(jù)、JSON 數(shù)據(jù)或者其他類型的內(nèi)容。

那么在SpringBoot進(jìn)行web程序開(kāi)發(fā)時(shí),它其實(shí)內(nèi)置了一個(gè)核心的Servlet程序 DispatcherServlet,稱之為 核心控制器,也可以叫做 前端控制器。 DispatcherServlet 負(fù)責(zé)接收頁(yè)面發(fā)送的請(qǐng)求,然后根據(jù)執(zhí)行的規(guī)則,將請(qǐng)求再轉(zhuǎn)發(fā)給后面的請(qǐng)求處理器Controller,請(qǐng)求處理器處理完請(qǐng)求之后,最終再由DispatcherServlet給瀏覽器響應(yīng)數(shù)據(jù)。

那將來(lái)瀏覽器發(fā)送請(qǐng)求,會(huì)攜帶請(qǐng)求數(shù)據(jù),包括:請(qǐng)求行、請(qǐng)求頭;請(qǐng)求到達(dá)tomcat之后,tomcat會(huì)負(fù)責(zé)解析這些請(qǐng)求數(shù)據(jù),然后呢將解析后的請(qǐng)求數(shù)據(jù)會(huì)傳遞給Servlet程序中的HttpServletRequest對(duì)象,那也就意味著 HttpServletRequest 對(duì)象就可以獲取到請(qǐng)求數(shù)據(jù)。 而Tomcat,還給Servlet程序傳遞了一個(gè)參數(shù) HttpServletResponse,通過(guò)這個(gè)對(duì)象,我們就可以給瀏覽器設(shè)置響應(yīng)數(shù)據(jù) 。

一 請(qǐng)求

?

1、Postman(接口測(cè)試工具)

postman的安裝使用教程 我已經(jīng)在另一篇文章詳細(xì)介紹?Postman安裝使用教程-CSDN博客

2、簡(jiǎn)單參數(shù)

①、原始方式

Tomcat接收到http請(qǐng)求時(shí):把請(qǐng)求的相關(guān)信息封裝到HttpServletRequest對(duì)象中

在Controller中,我們要想獲取Request對(duì)象,可以直接在方法的形參中聲明 HttpServletRequest 對(duì)象。然后就可以通過(guò)該對(duì)象來(lái)獲取請(qǐng)求信息:

②、SpringBoot方法
在Springboot方法中可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。在Springboot的環(huán)境中,對(duì)原始的API進(jìn)行了封裝,接收參數(shù)的形式更加簡(jiǎn)單。 對(duì)于簡(jiǎn)單參數(shù)來(lái)講,只要保證請(qǐng)求參數(shù)名和Controller方法中的形參名保持一致,就可以獲取到請(qǐng)求參數(shù)中的數(shù)據(jù)值。

發(fā)送Post請(qǐng)求:?

如果形參與請(qǐng)求參數(shù)對(duì)應(yīng)不上,也可以通過(guò)注解@RequestParam來(lái)進(jìn)行映射:

?

但是如果沒(méi)有設(shè)置@RequestParam注解,且方法形參名與請(qǐng)求參數(shù)名不一致,那么雖然會(huì)無(wú)法接收到請(qǐng)求數(shù)據(jù),但是它不會(huì)報(bào)錯(cuò)?

注解@RequestParam中的required屬性默認(rèn)為true,代表該請(qǐng)求參數(shù)必須傳遞,如果不傳遞就會(huì)報(bào)錯(cuò):

?

?

③、小結(jié)

?

3、實(shí)體參數(shù)

在使用簡(jiǎn)單參數(shù)做為數(shù)據(jù)傳遞方式時(shí),前端傳遞了多少個(gè)請(qǐng)求參數(shù),后端controller方法中的形參就要書(shū)寫(xiě)多少個(gè)。如果請(qǐng)求參數(shù)比較多,通過(guò)上述的方式一個(gè)參數(shù)一個(gè)參數(shù)的接收,會(huì)比較繁瑣。

①、簡(jiǎn)單實(shí)體對(duì)象

此時(shí),我們可以考慮將請(qǐng)求參數(shù)封裝到一個(gè)實(shí)體類對(duì)象中。 要想完成數(shù)據(jù)封裝,需要遵守如下規(guī)則:請(qǐng)求參數(shù)名與實(shí)體類的屬性名相同

User類 定義在實(shí)體類Pojo中?

②、復(fù)雜實(shí)體對(duì)象?

?

?

?

③、小結(jié)?

如果是復(fù)雜實(shí)體對(duì)象,也只需按照對(duì)象層次結(jié)構(gòu)關(guān)系即可接收嵌套實(shí)體類屬性參數(shù)

?

4、數(shù)組集合參數(shù)

數(shù)組集合參數(shù)的使用場(chǎng)景:在HTML的表單中,有一個(gè)表單項(xiàng)是支持多選的(復(fù)選框),可以提交選擇的多個(gè)值

多個(gè)值是怎么提交的呢?其實(shí)多個(gè)值也是一個(gè)一個(gè)逐個(gè)提交的

①、數(shù)組

?

?②、集合

?

requestparam適用場(chǎng)景:

**`@RequestParam`注解的使用場(chǎng)景**

1- **綁定單個(gè)請(qǐng)求參數(shù)** - 當(dāng)你需要從HTTP請(qǐng)求(通常是GET或POST請(qǐng)求)中獲取單個(gè)參數(shù)時(shí),可以使用`@RequestParam`。

例如,在一個(gè)處理用戶登錄的方法中,如果前端通過(guò)表單提交了用戶的用戶名和密碼,后端方法可以使用`@RequestParam`來(lái)獲取這些參數(shù)。

```java @RequestMapping("/login")

public String login(@RequestParam("username") String username, @RequestParam("password") String password) {

????????// 在這里進(jìn)行登錄驗(yàn)證邏輯

????????return "loginSuccess";

} ```

- 這里`@RequestParam("username")`和`@RequestParam("password")`分別用于獲取名為“username”和“password”的請(qǐng)求參數(shù),并將其綁定到對(duì)應(yīng)的方法參數(shù)上。

2- **參數(shù)非必需情況** - `@RequestParam`還可以處理參數(shù)不是必需的情況。你可以通過(guò)設(shè)置`required`屬性來(lái)指定參數(shù)是否必需。例如:

```java @RequestMapping("/search")

public String search(@RequestParam(name = "keyword", required = false) String keyword) {

????????if (keyword!= null) { // 進(jìn)行搜索邏輯 }

???????? return "searchResult";

} ```

- 在這個(gè)例子中,“keyword”參數(shù)不是必需的。如果前端沒(méi)有傳遞“keyword”參數(shù),`keyword`方法參數(shù)將為`null`。

3- **設(shè)置默認(rèn)值** - 當(dāng)參數(shù)不是必需且你希望在參數(shù)未傳遞時(shí)給方法參數(shù)賦予一個(gè)默認(rèn)值時(shí),可以使用`@RequestParam`的`defaultValue`屬性。

例如: ```java

@RequestMapping("/page")

public String showPage(@RequestParam(name = "pageNum", defaultValue = "1") int pageNum) {

???????? // 根據(jù)pageNum進(jìn)行分頁(yè)邏輯

????????return "pageContent"; }

```

- 這里如果前端沒(méi)有傳遞“pageNum”參數(shù),`pageNum`方法參數(shù)將默認(rèn)為`1`。

4- **綁定復(fù)雜類型列表或數(shù)組** - 除了單個(gè)參數(shù),`@RequestParam`還可以用于綁定列表或數(shù)組類型的參數(shù)。例如,當(dāng)你希望從前端獲取多個(gè)同名參數(shù)的值時(shí)(比如多選框的值): ```java

@RequestMapping("/select") public String selectOptions(@RequestParam("selectedOptions") List<String> selectedOptions) {

???????? // 處理選中的選項(xiàng)

????????return "selectionResult";

} ```

- 前端可能通過(guò)`?selectedOptions=option1&selectedOptions=option2`這種形式傳遞參數(shù),后端使用`@RequestParam`將這些同名參數(shù)值綁定到`List<String>`中。

?一個(gè)細(xì)節(jié)點(diǎn):

Array需要toString轉(zhuǎn)換為字符串 而 List不需要 是因?yàn)?#xff1a;

?1. **`String[]`數(shù)組的情況**

- 在Java中,`System.out.println()`方法沒(méi)有對(duì)數(shù)組類型進(jìn)行特殊的重載處理。當(dāng)直接傳遞一個(gè)數(shù)組給`System.out.println()`時(shí),它實(shí)際上是調(diào)用`Object`類的`toString()`方法。對(duì)于數(shù)組來(lái)說(shuō),`Object`類的`toString()`方法返回的是一個(gè)類似`[類型@哈希碼]`的字符串,這并不是我們想要的數(shù)組內(nèi)容的表示形式。

- 而`Arrays.toString()`方法是`java.util.Arrays`類提供的一個(gè)工具方法,它專門(mén)用于將數(shù)組轉(zhuǎn)換為一個(gè)包含數(shù)組元素的字符串,格式為`[元素1, 元素2,...]`。所以當(dāng)我們有一個(gè)`String[]`類型的參數(shù)時(shí),需要使用`Arrays.toString()`來(lái)將數(shù)組內(nèi)容以可讀的形式輸出。

2. **`List<String>`列表的情況** - 對(duì)于`List`類型,`java.util.List`繼承自`java.util.Collection`,而`Collection`類已經(jīng)重寫(xiě)了`toString()`方法。當(dāng)調(diào)用`System.out.println()`輸出一個(gè)`List`對(duì)象時(shí),實(shí)際上調(diào)用的是`List`類重寫(xiě)后的`toString()`方法。

- 重寫(xiě)后的`toString()`方法會(huì)按照`[元素1, 元素2,...]`的格式返回列表中的元素。所以,當(dāng)我們有一個(gè)`List<String>`類型的參數(shù)時(shí),可以直接將其傳遞給`System.out.println()`,就能得到列表內(nèi)容的可讀形式輸出。

?

5、日期參數(shù)

因?yàn)槿掌诘母袷蕉喾N多樣(如:2022-12-12 10:05:45 、2022/12/12 10:05:45),那么對(duì)于日期類型的參數(shù)在進(jìn)行封裝的時(shí)候,需要通過(guò)@DateTimeFormat注解,以及其pattern屬性來(lái)設(shè)置日期的格式

?

?

?

?

?兩個(gè)細(xì)節(jié)點(diǎn):

1. **關(guān)于日期時(shí)間格式化模式中的大小寫(xiě)**

- 在`SimpleDateFormat`(用于格式化`java.util.Date`類型)以及相關(guān)的日期時(shí)間格式化模式中,`MM`和`HH`大寫(xiě)是有特定含義的,并且在`@DateTimeFormat`注解用于格式化`java.time.LocalDateTime`等類型時(shí)也遵循類似規(guī)則。

- `MM`用于表示月份,是月份的數(shù)字表示,范圍是`01 - 12`。如果寫(xiě)成`mm`,則表示分鐘,范圍是`00 - 59`。

- `HH`用于表示24小時(shí)制的小時(shí)數(shù),范圍是`00 - 23`。如果寫(xiě)成`hh`,則表示12小時(shí)制的小時(shí)數(shù),范圍是`01 - 12`。

所以,為了準(zhǔn)確表示你想要的日期時(shí)間格式部分,這些字母的大小寫(xiě)是很重要的。

2. **關(guān)于`LocalDateTime`輸出中的`T`**

- `LocalDateTime`是Java 8引入的日期時(shí)間類型,它遵循ISO 8601日期時(shí)間格式標(biāo)準(zhǔn)。在ISO 8601格式中,日期和時(shí)間部分是通過(guò)`T`來(lái)分隔的。

- 例如,`2024 - 12 - 08T15:25:05`表示2024年12月8日15時(shí)25分05秒。`T`只是一個(gè)標(biāo)準(zhǔn)的分隔符,用于清晰地區(qū)分日期部分(`yyyy - MM - dd`)和時(shí)間部分(`HH:mm:ss`)。當(dāng)你將`LocalDateTime`對(duì)象打印輸出或者序列化為字符串時(shí),就會(huì)按照這種標(biāo)準(zhǔn)格式來(lái)顯示,方便在不同系統(tǒng)和應(yīng)用之間進(jìn)行日期時(shí)間信息的統(tǒng)一表示和交換。

6、JSON參數(shù)

在前后端進(jìn)行交互時(shí),如果是比較復(fù)雜的參數(shù),前后端通過(guò)會(huì)使用JSON格式的數(shù)據(jù)進(jìn)行傳輸。 (JSON是開(kāi)發(fā)中最常用的前后端數(shù)據(jù)交互方式)

①、Postman在發(fā)送請(qǐng)求時(shí),如何傳遞json格式的請(qǐng)求參數(shù)

?

?②、在服務(wù)端的controller方法中,如何接收json格式的請(qǐng)求參數(shù)

服務(wù)端Controller方法接收J(rèn)SON格式數(shù)據(jù):

- 傳遞json格式的參數(shù),在Controller中會(huì)使用實(shí)體類進(jìn)行封裝。

- 封裝規(guī)則:JSON數(shù)據(jù)鍵名與形參對(duì)象屬性名相同,定義POJO類型形參即可接收參數(shù)。需要使用 @RequestBody標(biāo)識(shí)。

- @RequestBody注解:將JSON數(shù)據(jù)映射到形參的實(shí)體類對(duì)象中(JSON中的key和實(shí)體類中的屬性名保持一致)

?

requestbody注解

1. **處理HTTP請(qǐng)求體中的數(shù)據(jù)時(shí)使用`@RequestBody`**

- **接收J(rèn)SON數(shù)據(jù)**

- 在現(xiàn)代Web開(kāi)發(fā)中,當(dāng)客戶端(如前端應(yīng)用或者其他外部系統(tǒng))通過(guò)POST、PUT等請(qǐng)求方法發(fā)送JSON數(shù)據(jù)給后端服務(wù)時(shí),后端通常使用`@RequestBody`來(lái)接收和解析這些數(shù)據(jù)。例如,在一個(gè)基于Spring Boot的Web應(yīng)用中,有一個(gè)用戶注冊(cè)的功能。前端會(huì)收集用戶的姓名、年齡、郵箱等信息,并將這些信息組裝成一個(gè)JSON對(duì)象,像這樣:

```json { "name": "John Doe",

????????????????"age": 30,

????????????????"email": "johndoe@example.com" } ```

后端的Spring Boot控制器方法可以這樣接收數(shù)據(jù):

```java

@RequestMapping(value = "/register", method = RequestMethod.POST)

????????public String registerUser(@RequestBody User user) {

???????? // 將用戶信息保存到數(shù)據(jù)庫(kù)等操作

????????return "success"; }

``` 這里假設(shè)`User`是一個(gè)Java類,包含`name`、`age`、`email`等屬性。`@RequestBody`注解會(huì)自動(dòng)將JSON數(shù)據(jù)解析并綁定到`User`對(duì)象的相應(yīng)屬性上。

- **接收XML數(shù)據(jù)(雖然現(xiàn)在JSON更常用)**

- 如果客戶端發(fā)送XML格式的數(shù)據(jù),也可以使用`@RequestBody`來(lái)處理。例如,假設(shè)客戶端發(fā)送如下XML數(shù)據(jù)來(lái)表示一個(gè)訂單:

```xml

????????<order>

????????????????<productId>

????????????????????????123

????????????????</productId>

????????????????<quantity>

????????????????????????5

????????????????</quantity>

????????????????<customerName>

????????????????????????Alice

????????????????</customerName>

????????</order> ```

后端可以定義一個(gè)`Order`類來(lái)匹配XML數(shù)據(jù)的結(jié)構(gòu),并且在控制器方法中使用`@RequestBody`來(lái)接收: ```java

@RequestMapping(value = "/placeOrder", method = RequestMethod.POST)

public String placeOrder(@RequestBody Order order) {

????????// 處理訂單邏輯,如保存訂單到數(shù)據(jù)庫(kù)等

????????return "orderPlaced";

} ```

- **復(fù)雜數(shù)據(jù)類型傳輸**

- 當(dāng)需要傳輸復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如包含嵌套對(duì)象或者集合的對(duì)象時(shí),`@RequestBody`非常有用。例如,一個(gè)包含多個(gè)商品信息的購(gòu)物車對(duì)象,其中每個(gè)商品對(duì)象又包含商品名稱、價(jià)格、數(shù)量等信息。前端將購(gòu)物車數(shù)據(jù)以JSON格式發(fā)送: ```json

{

????????"cartId": "C001",

????????"items": [

???????????????? {

????????????????????????"productName": "Book",

????????????????????????"price": 20.0,

????????????????????????"quantity": 2

?????????????????},

????????????????{

????????????????????????"productName": "Pen",

???????????????????????? "price": 3.0,

? ? ? ? ? ? ? ? ? ? ? ? ?"quantity": 5

????????????????}

?????????????????????]

} ```

后端可以通過(guò)`@RequestBody`接收并解析這個(gè)復(fù)雜的購(gòu)物車對(duì)象: ```java @RequestMapping(value = "/checkout", method = RequestMethod.POST)

public String checkout(@RequestBody ShoppingCart cart) {

????????// 計(jì)算總價(jià)、處理庫(kù)存等結(jié)賬邏輯

????????return "checkoutSuccess";

} ```?

requestmapping注解:

@RequestMapping注解的基本概念和用途

  • @RequestMapping是 Spring MVC 中用于處理請(qǐng)求地址映射的注解。它可以用在類和方法級(jí)別上。

@RequestMapping注解的屬性

  • value屬性(或path屬性,它們是等價(jià)的):用于指定請(qǐng)求路徑??梢允且粋€(gè)簡(jiǎn)單的字符串路徑,也可以是一個(gè)包含多個(gè)路徑的數(shù)組
  • method屬性:用于指定請(qǐng)求方法。除了RequestMethod.GETRequestMethod.POST外,還可以指定RequestMethod.PUT、RequestMethod.DELETERequestMethod.HEAD、RequestMethod.OPTIONS等。
  • consumes屬性:用于指定請(qǐng)求的MIME類型(媒體類型)。例如,consumes = "application/json"表示該方法只處理JSON格式的請(qǐng)求體。
  • produces屬性:用于指定響應(yīng)的MIME類型。例如,produces = "application/json"表示該方法返回的響應(yīng)是JSON格式。

7、路徑參數(shù)

傳統(tǒng)的開(kāi)發(fā)中請(qǐng)求參數(shù)是放在請(qǐng)求體(POST請(qǐng)求)傳遞或跟在URL后面通過(guò)?key=value的形式傳遞(GET請(qǐng)求)

而在現(xiàn)在的開(kāi)發(fā)中,還是經(jīng)常會(huì)直接在請(qǐng)求的URL中傳遞參數(shù)。例如:

http://localhost:8080/user/1 ? ? ? ? ? ? ? ?

http://localhost:880/user/1/0

上述的這種傳遞請(qǐng)求參數(shù)的形式,就稱之為 路徑參數(shù)

①、傳遞單個(gè)參數(shù)

?

?

②、傳遞多個(gè)參數(shù)

和傳遞單個(gè)參數(shù)方法相同,無(wú)非就是多寫(xiě)一個(gè)形參和注解,需要注意的是:形參要和傳遞的參數(shù)相同才能接收成功

?

?

?8、相關(guān)代碼

RequestController.java
package com.example.demo.controller;import com.example.demo.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;@RestController
public class RequestController {/*@RequestMapping("/simpleParam")public String simpleParam(String name, int age) {System.out.println(name + " " + age);return "OK";}*///1 簡(jiǎn)單參數(shù)@RequestMapping("/simpleParam")public String simpleParam(@RequestParam(name="name",required = false) String username, int age) {System.out.println(username + " " + age);return "OK";}//2 實(shí)體參數(shù) 簡(jiǎn)單實(shí)體參數(shù) 復(fù)雜實(shí)體參數(shù)@RequestMapping("/simplePojo")public String simplePojo(User user) {System.out.println(user);return "OK";}@RequestMapping("/complexPojo")public String complexPojo(User user) {System.out.println(user);return "OK";}//3 數(shù)組參數(shù) 集合參數(shù)@RequestMapping("/arrayParam")public String arrayParam(String[] hobby) {System.out.println(Arrays.toString(hobby));return "OK";}@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby) {System.out.println(hobby);return "OK";}//4 日期參數(shù)@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {System.out.println(updateTime);return "OK";}//5 json參數(shù)@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user) {System.out.println(user);return "OK";}//6 路徑參數(shù)@RequestMapping("/path/{id}")public String pathParam(@PathVariable Integer id) {System.out.println(id);return "OK";}@RequestMapping("/path/{id}/{name}")public String pathParam(@PathVariable Integer id, @PathVariable String name) {System.out.println(id + " " + name);return "OK";}
}

二、響應(yīng)

1、@ResponseBody

在我們前面所編寫(xiě)的controller方法中,都已經(jīng)設(shè)置了響應(yīng)數(shù)據(jù),那controller方法中的return的結(jié)果,怎么就可以響應(yīng)給瀏覽器呢?

?

@RestController是兩個(gè)注解的組合,@RestController = @Controller + @ResponseBody?

?

2、統(tǒng)一響應(yīng)結(jié)果

大家有沒(méi)有發(fā)現(xiàn)一個(gè)問(wèn)題,我們?cè)谇懊嫠帉?xiě)的這些Controller方法中,返回值各種各樣,沒(méi)有任何的規(guī)范

?如果我們開(kāi)發(fā)一個(gè)大型項(xiàng)目,項(xiàng)目中controller方法將成千上萬(wàn),使用上述方式將造成整個(gè)項(xiàng)目難以維護(hù)。那在真實(shí)的項(xiàng)目開(kāi)發(fā)中是什么樣子的呢?

①、定義一個(gè)統(tǒng)一響應(yīng)結(jié)構(gòu)類 Result

在真實(shí)的項(xiàng)目開(kāi)發(fā)中,無(wú)論是哪種方法,我們都會(huì)定義一個(gè)統(tǒng)一的返回結(jié)果。方案如下:

> 前端:只需要按照統(tǒng)一格式的返回結(jié)果進(jìn)行解析(僅一種解析方案),就可以拿到數(shù)據(jù)

?定義在一個(gè)實(shí)體類Result來(lái)包含以上信息,代碼如下:

public class Result {

? ? private Integer code;//響應(yīng)碼,1 代表成功; 0 代表失敗

? ? private String msg; ?//響應(yīng)碼 描述字符串

? ? private Object data; //返回的數(shù)據(jù)

? ? public Result() { }

? ? public Result(Integer code, String msg, Object data) {

? ? ? ? this.code = code;

? ? ? ? this.msg = msg;

? ? ? ? this.data = data;

? ? }

? ? public Integer getCode() {

? ? ? ? return code;

? ? }

? ? public void setCode(Integer code) {

? ? ? ? this.code = code;

? ? }

? ? public String getMsg() {

? ? ? ? return msg;

? ? }

? ? public void setMsg(String msg) {

? ? ? ? this.msg = msg;

? ? }

? ? public Object getData() {

? ? ? ? return data;

? ? }

? ? public void setData(Object data) {

? ? ? ? this.data = data;

? ? }

? ? //增刪改 成功響應(yīng)(不需要給前端返回?cái)?shù)據(jù))

? ? public static Result success(){

? ? ? ? return new Result(1,"success",null);

? ? }

? ? //查詢 成功響應(yīng)(把查詢結(jié)果做為返回?cái)?shù)據(jù)響應(yīng)給前端)

? ? public static Result success(Object data){

? ? ? ? return new Result(1,"success",data);

? ? }

? ? //失敗響應(yīng)

? ? public static Result error(String msg){

? ? ? ? return new Result(0,msg,null);

? ? }

}

?效果展示:

②、小結(jié)?

http://aloenet.com.cn/news/28161.html

相關(guān)文章:

  • 找人開(kāi)發(fā)一個(gè)app多少錢網(wǎng)站建設(shè)排名優(yōu)化
  • 做公司網(wǎng)站需要多外包網(wǎng)絡(luò)推廣公司推廣網(wǎng)站
  • 網(wǎng)站后期運(yùn)營(yíng)方案步驟十大電商代運(yùn)營(yíng)公司
  • 是在百度中建設(shè)網(wǎng)站?百度的網(wǎng)頁(yè)地址
  • 如何搭建一個(gè)論壇網(wǎng)站黑帽seo技術(shù)培訓(xùn)
  • 網(wǎng)站充值提現(xiàn)公司賬務(wù)怎么做網(wǎng)站建設(shè) 全網(wǎng)營(yíng)銷
  • 秦皇島城鄉(xiāng)建設(shè)局電話桂平seo關(guān)鍵詞優(yōu)化
  • 護(hù)欄板銷售網(wǎng)站怎么做百度競(jìng)價(jià)可以自學(xué)嗎
  • 網(wǎng)站建設(shè)的完整流程成人再就業(yè)培訓(xùn)班
  • 網(wǎng)站建設(shè)步驟實(shí)踐報(bào)告廣州市新聞最新消息
  • 深圳做app網(wǎng)站建設(shè)seo研究中心vip課程
  • vue.js 可以做網(wǎng)站嗎百度拉新推廣平臺(tái)
  • 彩票走勢(shì)圖網(wǎng)站是用什么程序做的搜索引擎優(yōu)化的目標(biāo)
  • 海外 網(wǎng)站 推廣百度一下百度知道
  • 網(wǎng)站是否被百度收錄網(wǎng)址信息查詢
  • 怎嗎做網(wǎng)站掙錢揭陽(yáng)seo快速排名
  • 如何用騰訊云做網(wǎng)站seo百度關(guān)鍵詞優(yōu)化
  • 聊城做網(wǎng)站好的公司淘寶網(wǎng)店代運(yùn)營(yíng)正規(guī)公司
  • 做網(wǎng)站美工廣州seo推廣公司
  • 山西傳染病最新消息今天唐山seo排名外包
  • 如何建設(shè)網(wǎng)站方便后期維護(hù)東莞網(wǎng)絡(luò)推廣公司
  • 做培訓(xùn)的網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣工作內(nèi)容怎么寫(xiě)
  • 游戲軟件開(kāi)發(fā)屬于什么專業(yè)seo內(nèi)部?jī)?yōu)化具體做什么
  • 宣城市網(wǎng)站集約化建設(shè)茶葉網(wǎng)絡(luò)推廣方案
  • 長(zhǎng)沙做企業(yè)網(wǎng)站的公司中國(guó)網(wǎng)站排名
  • 網(wǎng)站制作難點(diǎn)故事式的軟文廣告例子
  • 青島網(wǎng)站建設(shè)青島新思維百度用戶服務(wù)中心人工電話
  • 浙江省建設(shè)通網(wǎng)站迅雷磁力
  • 網(wǎng)站建設(shè)找星火龍關(guān)鍵詞排名代做
  • PC端網(wǎng)站開(kāi)發(fā)以及設(shè)計(jì)費(fèi)用qq群推廣網(wǎng)站