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

Java SSM整合開(kāi)發(fā)統(tǒng)一結(jié)果封裝詳解

 更新時(shí)間:2022年08月19日 16:10:28   作者:十八歲討厭編程  
這篇文章主要介紹了Java SSM整合開(kāi)發(fā)實(shí)現(xiàn)統(tǒng)一結(jié)果封裝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

表現(xiàn)層與前端數(shù)據(jù)傳輸協(xié)議定義

SSM整合以及功能模塊開(kāi)發(fā)完成后,接下來(lái),我們?cè)谏鲜霭咐幕A(chǔ)上分析下有哪些問(wèn)題需要我們?nèi)ソ鉀Q下。首先第一個(gè)問(wèn)題是:

在Controller層增刪改返回給前端的是boolean類型數(shù)據(jù)

在Controller層查詢單個(gè)返回給前端的是對(duì)象

在Controller層查詢所有返回給前端的是集合對(duì)象

目前我們就已經(jīng)有三種數(shù)據(jù)類型返回給前端,如果隨著業(yè)務(wù)的增長(zhǎng),我們需要返回的數(shù)據(jù)類型會(huì)越來(lái)越多。對(duì)于前端開(kāi)發(fā)人員在解析數(shù)據(jù)的時(shí)候就比較凌亂了,所以對(duì)于前端來(lái)說(shuō),如果后臺(tái)能夠返回一個(gè)統(tǒng)一的數(shù)據(jù)結(jié)果,前端在解析的時(shí)候就可以按照一種方式進(jìn)行解析。開(kāi)發(fā)就會(huì)變得更加簡(jiǎn)單。

所以我們就想能不能將返回結(jié)果的數(shù)據(jù)進(jìn)行統(tǒng)一,具體如何來(lái)做,大體的思路為:

  • 為了封裝返回的結(jié)果數(shù)據(jù):創(chuàng)建結(jié)果模型類,封裝數(shù)據(jù)到data屬性中
  • 為了封裝返回的數(shù)據(jù)是何種操作及是否操作成功:封裝操作結(jié)果到code屬性中
  • 操作失敗后為了封裝返回的錯(cuò)誤信息:封裝特殊消息到message(msg)屬性中

根據(jù)分析,我們可以設(shè)置統(tǒng)一數(shù)據(jù)返回結(jié)果類

public class Result{
	private Object data;
	private Integer code;
	private String msg;
}

注意:Result類名及類中的字段并不是固定的,可以根據(jù)需要自行增減提供若干個(gè)構(gòu)造方法,方便操作。

表現(xiàn)層與前端數(shù)據(jù)傳輸協(xié)議實(shí)現(xiàn)

結(jié)果封裝

對(duì)于結(jié)果封裝,我們應(yīng)該是在表現(xiàn)層進(jìn)行處理,所以我們把結(jié)果類放在controller包下,當(dāng)然你也可以放在domain包,這個(gè)都是可以的,具體如何實(shí)現(xiàn)結(jié)果封裝,具體的步驟為:

步驟1:創(chuàng)建Result類

public class Result {
    //描述統(tǒng)一格式中的數(shù)據(jù)
    private Object data;
    //描述統(tǒng)一格式中的編碼,用于區(qū)分操作,可以簡(jiǎn)化配置0或1表示成功失敗
    private Integer code;
    //描述統(tǒng)一格式中的消息,可選屬性
    private String msg;
    public Result() {
    }
    //構(gòu)造方法是方便對(duì)象的創(chuàng)建
    public Result(Integer code,Object data) {
        this.data = data;
        this.code = code;
    }
    //構(gòu)造方法是方便對(duì)象的創(chuàng)建
    public Result(Integer code, Object data, String msg) {
        this.data = data;
        this.code = code;
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        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;
    }
    @Override
    public String toString() {
        return "Result{" +
                "data=" + data +
                ", code=" + code +
                ", msg='" + msg + '\'' +
                '}';
    }
}

注意:

可以不寫(xiě)toString方法,他最后會(huì)被被轉(zhuǎn)為json格式。 但是getter和setter方法是一定要有的!

步驟2:定義返回碼Code類

//狀態(tài)碼
public class Code {
    public static final Integer SAVE_OK = 20011;
    public static final Integer DELETE_OK = 20021;
    public static final Integer UPDATE_OK = 20031;
    public static final Integer GET_OK = 20041;
    public static final Integer SAVE_ERR = 20010;
    public static final Integer DELETE_ERR = 20020;
    public static final Integer UPDATE_ERR = 20030;
    public static final Integer GET_ERR = 20040;
}

注意:code類中的常量設(shè)計(jì)也不是固定的,可以根據(jù)需要自行增減,例如將查詢?cè)龠M(jìn)行細(xì)分為GET_OK,GET_ALL_OK,GET_PAGE_OK等。

步驟3:修改Controller類的返回值

//統(tǒng)一每一個(gè)控制器方法返回值
@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;
    @PostMapping
    public Result save(@RequestBody Book book) {
        boolean flag = bookService.save(book);
        return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERR,flag);
    }
    @PutMapping
    public Result update(@RequestBody Book book) {
        boolean flag = bookService.update(book);
        return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);
    }
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        boolean flag = bookService.delete(id);
        return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);
    }
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        Book book = bookService.getById(id);
        Integer code = book != null ? Code.GET_OK : Code.GET_ERR;
        String msg = book != null ? "" : "數(shù)據(jù)查詢失敗,請(qǐng)重試!";
        return new Result(code,book,msg);
    }
    @GetMapping
    public Result getAll() {
        List<Book> bookList = bookService.getAll();
        Integer code = bookList != null ? Code.GET_OK : Code.GET_ERR;
        String msg = bookList != null ? "" : "數(shù)據(jù)查詢失敗,請(qǐng)重試!";
        return new Result(code,bookList,msg);
    }
}

這里拿bookList和null比較是因?yàn)?,如果查詢?nèi)繘](méi)有查到結(jié)果,那么就會(huì)直接返回一個(gè)null,而不是返回一個(gè)空列表!

在根據(jù)id查book的時(shí)候,如果沒(méi)有查到也是返回一個(gè)null

最后我們的項(xiàng)目結(jié)構(gòu):

步驟4:啟動(dòng)服務(wù)測(cè)試

至此,我們的返回結(jié)果就已經(jīng)能以一種統(tǒng)一的格式返回給前端。前端根據(jù)返回的結(jié)果,先從中獲取code,根據(jù)code判斷,如果成功則取data屬性的值,如果失敗,則取msg中的值做提示。

到此這篇關(guān)于Java SSM整合開(kāi)發(fā)統(tǒng)一結(jié)果封裝詳解的文章就介紹到這了,更多相關(guān)Java封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis分布式鎖解決表單重復(fù)提交的問(wèn)題

    redis分布式鎖解決表單重復(fù)提交的問(wèn)題

    在系統(tǒng)中,有些接口如果重復(fù)提交,可能會(huì)造成臟數(shù)據(jù)或者其他的嚴(yán)重的問(wèn)題,所以我們一般會(huì)對(duì)與數(shù)據(jù)庫(kù)有交互的接口進(jìn)行重復(fù)處理。本文就詳細(xì)的介紹一下redis分布式鎖解決表單重復(fù)提交,感興趣的可以了解一下
    2021-11-11
  • Java中Timer的schedule()方法參數(shù)詳解

    Java中Timer的schedule()方法參數(shù)詳解

    今天小編就為大家分享一篇關(guān)于Java中Timer的schedule()方法參數(shù)詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Java日期時(shí)間類及計(jì)算詳解

    Java日期時(shí)間類及計(jì)算詳解

    這篇文章主要介紹了Java日期時(shí)間類及計(jì)算詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-07-07
  • SpringBoot3.0整合chatGPT的完整步驟

    SpringBoot3.0整合chatGPT的完整步驟

    ChatGPT是OpenAI推出的一個(gè)語(yǔ)言模型系統(tǒng),它能夠?qū)崟r(shí)回答用戶提問(wèn),包括聊天、糾正語(yǔ)法錯(cuò)誤,甚至是寫(xiě)代碼、寫(xiě)劇本等,由于可玩性很高,迅速在全球范圍內(nèi)風(fēng)靡起來(lái),下面這篇文章主要給大家介紹了關(guān)于SpringBoot3.0整合chatGPT的完整步驟,需要的朋友可以參考下
    2022-12-12
  • Spring Boot整合mybatis使用注解實(shí)現(xiàn)動(dòng)態(tài)Sql、參數(shù)傳遞等常用操作(實(shí)現(xiàn)方法)

    Spring Boot整合mybatis使用注解實(shí)現(xiàn)動(dòng)態(tài)Sql、參數(shù)傳遞等常用操作(實(shí)現(xiàn)方法)

    這篇文章主要介紹了Spring Boot整合mybatis使用注解實(shí)現(xiàn)動(dòng)態(tài)Sql、參數(shù)傳遞等常用操作(實(shí)現(xiàn)方法),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java權(quán)重隨機(jī)的實(shí)現(xiàn)方法

    Java權(quán)重隨機(jī)的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java權(quán)重隨機(jī)的實(shí)現(xiàn)方法,實(shí)例分析了權(quán)重隨機(jī)算法的原理與完整實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • Java實(shí)現(xiàn)文件點(diǎn)擊沒(méi)反應(yīng)的方法

    Java實(shí)現(xiàn)文件點(diǎn)擊沒(méi)反應(yīng)的方法

    jsp頁(yè)面鏈接,點(diǎn)擊訪問(wèn)action用IO流去下載服務(wù)器上的文件,問(wèn)題是任憑怎么點(diǎn)擊都沒(méi)反應(yīng),日志也不報(bào)錯(cuò)。這篇文章給大家介紹Java實(shí)現(xiàn)文件點(diǎn)擊沒(méi)反應(yīng)的方法,需要的朋友參考下吧
    2018-07-07
  • Java算法之堆排序代碼示例

    Java算法之堆排序代碼示例

    這篇文章主要介紹了Java算法之堆排序代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot自定義錯(cuò)誤處理邏輯詳解

    SpringBoot自定義錯(cuò)誤處理邏輯詳解

    這篇文章主要介紹了SpringBoot自定義錯(cuò)誤處理邏輯,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • SpringMVC高級(jí)開(kāi)發(fā)功能實(shí)現(xiàn)過(guò)程解析

    SpringMVC高級(jí)開(kāi)發(fā)功能實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了SpringMVC高級(jí)開(kāi)發(fā)功能實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論