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

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

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

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

SSM整合以及功能模塊開發(fā)完成后,接下來,我們在上述案例的基礎(chǔ)上分析下有哪些問題需要我們?nèi)ソ鉀Q下。首先第一個(gè)問題是:

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

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

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

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

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

  • 為了封裝返回的結(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é)果封裝

對于結(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ū)分操作,可以簡化配置0或1表示成功失敗
    private Integer code;
    //描述統(tǒng)一格式中的消息,可選屬性
    private String msg;
    public Result() {
    }
    //構(gòu)造方法是方便對象的創(chuàng)建
    public Result(Integer code,Object data) {
        this.data = data;
        this.code = code;
    }
    //構(gòu)造方法是方便對象的創(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 + '\'' +
                '}';
    }
}

注意:

可以不寫toString方法,他最后會被被轉(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ù)需要自行增減,例如將查詢再進(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ù)查詢失敗,請重試!";
        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ù)查詢失敗,請重試!";
        return new Result(code,bookList,msg);
    }
}

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

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

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

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

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

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

相關(guān)文章

  • Spring?Boot日志打印配置詳細(xì)介紹

    Spring?Boot日志打印配置詳細(xì)介紹

    本文詳細(xì)介紹了如何在SpringBoot項(xiàng)目中進(jìn)行日志配置,包括日志框架概述、日志級別配置、日志文件輸出與滾動(dòng)配置、電商交易系統(tǒng)中的應(yīng)用示例以及常見日志問題及解決方案,通過靈活的日志配置,開發(fā)者可以更好地管理和調(diào)試軟件系統(tǒng),需要的朋友可以參考下
    2024-11-11
  • springboot+Vue實(shí)現(xiàn)分頁的示例代碼

    springboot+Vue實(shí)現(xiàn)分頁的示例代碼

    本文主要介紹了springboot+Vue實(shí)現(xiàn)分頁的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • IntelliJ IDEA多屏后窗口不顯示問題解決方案

    IntelliJ IDEA多屏后窗口不顯示問題解決方案

    這篇文章主要介紹了IntelliJ IDEA多屏后窗口不顯示問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • springboot 設(shè)置CorsFilter跨域不生效的解決

    springboot 設(shè)置CorsFilter跨域不生效的解決

    這篇文章主要介紹了springboot 設(shè)置CorsFilter跨域不生效的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中4種經(jīng)典限流算法講解

    Java中4種經(jīng)典限流算法講解

    本文主要介紹了Java中4種經(jīng)典限流算法講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java中的CompletableFuture基本用法

    Java中的CompletableFuture基本用法

    這篇文章主要介紹了Java中的CompletableFuture基本用法,CompletableFuture是java.util.concurrent庫在java 8中新增的主要工具,同傳統(tǒng)的Future相比,其支持流式計(jì)算、函數(shù)式編程、完成通知、自定義異常處理等很多新的特性,需要的朋友可以參考下
    2024-01-01
  • Spring核心容器之ApplicationContext上下文啟動(dòng)準(zhǔn)備詳解

    Spring核心容器之ApplicationContext上下文啟動(dòng)準(zhǔn)備詳解

    這篇文章主要介紹了Spring核心容器之ApplicationContext上下文啟動(dòng)準(zhǔn)備詳解,ApplicationContext 繼承自 BeanFactory ,其不僅包含 BeanFactory 所有功能,還擴(kuò)展了容器功能,需要的朋友可以參考下
    2023-11-11
  • java方法重載和參數(shù)類型自動(dòng)提升方式

    java方法重載和參數(shù)類型自動(dòng)提升方式

    這篇文章主要介紹了java方法重載和參數(shù)類型自動(dòng)提升方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 分析Java非阻塞算法Lock-Free的實(shí)現(xiàn)

    分析Java非阻塞算法Lock-Free的實(shí)現(xiàn)

    非阻塞算法一般會使用CAS來協(xié)調(diào)線程的操作。雖然非阻塞算法有諸多優(yōu)點(diǎn),但是在實(shí)現(xiàn)上要比基于鎖的算法更加繁瑣和負(fù)責(zé)。本文將會介紹兩個(gè)是用非阻塞算法實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)。
    2021-06-06
  • 深入理解Java之HashMap源碼剖析

    深入理解Java之HashMap源碼剖析

    這篇文章主要介紹了深入理解Java之HashMap源碼剖析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論

上高县| 临漳县| 麦盖提县| 绥芬河市| 都昌县| 西昌市| 武鸣县| 油尖旺区| 昌吉市| 元江| 贵南县| 罗甸县| 万安县| 长白| 沙坪坝区| 开封市| 郓城县| 海原县| 高密市| 台湾省| 亳州市| 思茅市| 本溪市| 德庆县| 马公市| 松溪县| 靖边县| 博罗县| 镇雄县| 新乡市| 成都市| 靖江市| 茶陵县| 横山县| 台东市| 建湖县| 当雄县| 武强县| 孝义市| 东乡县| 孟津县|