最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果深入分析

 更新時間:2022年12月08日 14:09:48   作者:居然天上樓  
這篇文章主要介紹了SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

1.控制器的響應(yīng)結(jié)果

當(dāng)控制器處理了請求之后,向客戶端響應(yīng)的結(jié)果中,應(yīng)該至少包含:

  • 業(yè)務(wù)狀態(tài)碼:通常是數(shù)值類型的,客戶端可以根據(jù)此數(shù)值來判斷操作成功與否,或者,失敗時是哪一種失敗,具體值應(yīng)該是由服務(wù)器端和客戶端協(xié)商的
  • 消息:是字符串類型的,客戶端可以將此消息直接顯示在軟件的界面中(例如顯示在網(wǎng)頁中、顯示在手機(jī)APP中……),有了這個數(shù)據(jù),客戶端就不必自行組織語言來描述操作結(jié)果

由于響應(yīng)結(jié)果只有1個,但是需要同時包含業(yè)務(wù)狀態(tài)和消息,應(yīng)該使用JSON格式來組織這樣的結(jié)果,例如:

{

"state": 1,

"message": "添加相冊成功!"

}

或者:

{

"state": 2,

"message": "添加相冊失敗,嘗試添加的相冊名稱已經(jīng)被使用!"

}

2.相關(guān)配置

在Spring MVC框架中,當(dāng)需要響應(yīng)JSON格式的字符串時,需要:

使用自定義的數(shù)據(jù)類型作為處理請求的方法的返回值類型,并返回自定義數(shù)據(jù)類型的對象

需要在項(xiàng)目中添加jackson-databind依賴項(xiàng)

  • spring-boot-starter-web中已經(jīng)包含jackson-databind

需要開啟注解驅(qū)動

  • 在基于XML配置的Spring MVC項(xiàng)目中,需要在XML配置中添加<annotation-driven/>標(biāo)簽
  • 在基于注解配置的Spring MVC項(xiàng)目中,需要在配置類上添加@EnableWebMvc注解
  • 在Spring Boot項(xiàng)目中,不需要額外配置

則在項(xiàng)目的根包下創(chuàng)建web.JsonResult類,在類中聲明JSON結(jié)果中對應(yīng)的屬性:

package cn.tedu.csmall.product.web;
import lombok.Data;
@Data
public class JsonResult {
    private Integer state;
    private String message;
    public static JsonResult ok() {
        JsonResult jsonResult = new JsonResult();
        jsonResult.state = ServiceCode.OK;
        return jsonResult;
    }
}

然后,調(diào)整控制器中處理請求的方法的返回結(jié)果:

@ApiOperation("添加相冊")
@PostMapping("/add-new")
public JsonResult addNew(AlbumAddNewDTO albumAddNewDTO) {
    albumService.addNew(albumAddNewDTO);
    return JsonResult.ok();
}
if (response.data.state == 1) {
    // 成功
} else if (response.data.state == 2) {
    // 失敗:名稱被占用
    alert(response.data.message);
}
    login(){
        axios.post("/login",v.user).then(function (response) {
            if (response.data==1){
                location.href="/admin.html" rel="external nofollow" ; //跳轉(zhuǎn)到后臺管理頁面
            }else if(response.data==2){
                v.\$message.error("用戶名不存在!");
            }else{
                v.\$message.error("密碼錯誤!");
            }
        })
    }

3.使用枚舉優(yōu)化代碼

JsonResult中設(shè)計了Integer state屬性,用于表示“業(yè)務(wù)狀態(tài)碼”,由于此值是可以由客戶端和服務(wù)器端協(xié)商的值,所以,值的大小不一定是固定的,例如“成功”,可以使用1表示,也可以使用200表示,只要協(xié)商一致即可,所以,在應(yīng)用時,不應(yīng)該直接將數(shù)值常量賦值到state屬性上,否則,代碼的可讀性較差!

**反例:**jsonResult.state = 200;

應(yīng)該將數(shù)值聲明為常量來使用,以增加代碼的可讀性!

**正例:**jsonResult.state = ServiceCode.OK;

在設(shè)計方法時,如果使用Integer state作為參數(shù),方法的調(diào)用者仍可能不使用聲明的常量,而是直接傳入某個未協(xié)商的直接常量值,例如,當(dāng)設(shè)計了fail()方法時:

public static JsonResult fail(Integer state, String message) { 
    // ... 
}

則可能調(diào)用時傳入錯誤的值:

JsonResult.fail(99999, e.getMessage());

由于state對應(yīng)的值是相對有限的,是可以窮舉的,則可以使用枚舉來解決問題!

package cn.tedu.csmall.product.web;
public enum ServiceCode {
    OK(200),
    ERR_NOT_FOUND(404),
    ERR_CONFLICT(409);
    private Integer value;
    ServiceCode(Integer value) {
        this.value = value;
    }
    public Integer getValue() {
        return value;
    }
}

如果將方法的參數(shù)設(shè)計為以上枚舉類型,則方法的調(diào)用者只能傳入以上列舉的3個值中的某1個!例如將方法調(diào)整為:

public static JsonResult fail(ServiceCode serviceCode, String message) { 
    // ... 
}

調(diào)用時則是:

JsonResult.fail(ServiceCode.ERR_CONFLICT, e.getMessage());

到此這篇關(guān)于SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果深入分析的文章就介紹到這了,更多相關(guān)SpringMVC控制器響應(yīng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • tomcat啟動完成執(zhí)行 某個方法 定時任務(wù)(Spring)操作

    tomcat啟動完成執(zhí)行 某個方法 定時任務(wù)(Spring)操作

    這篇文章主要介紹了tomcat啟動完成執(zhí)行 某個方法 定時任務(wù)(Spring)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring-Web與Spring-WebFlux沖突問題解決

    Spring-Web與Spring-WebFlux沖突問題解決

    Spring WebFlux是一套全新的Reactive Web技術(shù)棧,實(shí)現(xiàn)完全非阻塞,支持Reactive Streams背壓等特性,這篇文章主要給大家介紹了關(guān)于Spring-Web與Spring-WebFlux沖突問題解決的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • java swing框架實(shí)現(xiàn)貪吃蛇游戲

    java swing框架實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了java swing框架實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 詳解Java實(shí)踐之抽象工廠模式

    詳解Java實(shí)踐之抽象工廠模式

    抽象工廠模式用于產(chǎn)品族的構(gòu)建。抽象工廠是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠是指當(dāng)有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產(chǎn)品的具體情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象
    2021-06-06
  • mybatis plus in方法使用說明

    mybatis plus in方法使用說明

    這篇文章主要介紹了mybatis plus in方法使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 淺析Java IO相關(guān)知識點(diǎn)

    淺析Java IO相關(guān)知識點(diǎn)

    本篇文章給大家分享了關(guān)于java io的一些相關(guān)知識點(diǎn)以及相關(guān)內(nèi)容,對此有需要的朋友可以學(xué)習(xí)參考下。
    2018-05-05
  • java實(shí)戰(zhàn)技巧之if-else代碼優(yōu)化技巧大全

    java實(shí)戰(zhàn)技巧之if-else代碼優(yōu)化技巧大全

    代碼中如果if-else比較多,閱讀起來比較困難,維護(hù)起來也比較困難,很容易出bug,下面這篇文章主要給大家介紹了關(guān)于java實(shí)戰(zhàn)技巧之if-else代碼優(yōu)化技巧的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • java壓縮多個文件并且返回流示例

    java壓縮多個文件并且返回流示例

    這篇文章主要介紹了java壓縮多個文件并且返回流示例,返回壓縮流主是為了在程序里再做其它操作,需要的朋友可以參考下
    2014-03-03
  • Java設(shè)計模式UML之類圖精解

    Java設(shè)計模式UML之類圖精解

    在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來表示,比如下圖表示一個Employee類,它包含name,age和email這3個屬性,以及modifyInfo()方法
    2022-02-02
  • Spring實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離詳解

    Spring實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離詳解

    這篇文章主要介紹了Spring?實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離,大多數(shù)系統(tǒng)都是讀多寫少,為了降低數(shù)據(jù)庫的壓力,可以對主庫創(chuàng)建多個從庫,從庫自動從主庫同步數(shù)據(jù),程序中將寫的操作發(fā)送到主庫,將讀的操作發(fā)送到從庫去執(zhí)行,需要的朋友可以參考下
    2024-01-01

最新評論

竹山县| 景宁| 山丹县| 九龙县| 枣庄市| 巴林右旗| 金阳县| 上虞市| 陆河县| 阿尔山市| 红安县| 吉木乃县| 泽普县| 昭觉县| 西贡区| 都匀市| 哈密市| 玉溪市| 天峨县| 永丰县| 厦门市| 高台县| 山丹县| 长沙县| 定结县| 余庆县| 新化县| 娄底市| 南和县| 景东| 丘北县| 邵东县| 酉阳| 时尚| 公安县| 北京市| 曲靖市| 台北县| 邵东县| 方正县| 高要市|