1. 程式人生 > 其它 >springboot 專案實戰-03章-封裝通用類,請求和返回體

springboot 專案實戰-03章-封裝通用類,請求和返回體

1.新增通用返回類,以後所有介面都使用該類作為返回類。

為什麼需要通用返回類?後端介面較多,為了前端對後端的返回結果做統一的處理,需要規範後端的返回值。可以通過新增通用返回類,來規範統一的返回結果

例子:

public class CommonResp<T> {

     /**
      * 業務上的成功或失敗
      */
     private boolean success = true;//預設是true

     /**
      * 返回資訊
      */
     private String message;

     /**
      * 返回泛型資料,自定義型別
      
*/ private T content; public boolean getSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public String getMessage() { return message; } public void setMessage(String message) {
this.message = message; } public T getContent() { return content; } public void setContent(T content) { this.content = content; } @Override public String toString() { final StringBuffer sb = new StringBuffer("ResponseDto{"); sb.append(
"success=").append(success); sb.append(", message='").append(message).append('\''); sb.append(", content=").append(content); sb.append('}'); return sb.toString(); } }

2.新增請求類。Spring 自動封裝,將引數自動對映到類屬性

為什麼要使用請求類?自動封裝,避免多次開發以及傳入引數過長等問題。自動封裝,只要類中的屬性名和入參的屬性名一致,Spring會自動對映。

public class EbookReq {
    private Long id;

    private String name;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //列印日誌用的
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", name=").append(name);
        sb.append("]");
        return sb.toString();
    }
}

請求

GET http://localhost:8088/ebook/list?name=Oracle
Accept: application/json

可以將name 自動封裝給EbookReq。避免了下次需要傳入id的時候, 又要重新開發controller層和service層。

3.返回引數的封裝

為什麼需要封裝返回引數?

1中已經封裝過一次了,為什麼這裡還要說封裝?因為對於通用返回來說,並不是把所有的content結果都封裝返回的。比如登陸資訊中的密碼欄位,是不返回給使用者的。所以粗暴的把整個資料庫的結果都返回給用給使用者,是不合理的。

定義content的返回型別,然後使用spring的拷貝功能,實現拷貝

BeanUtils.copyProperties(ebook, ebookQueryResp);//物件複製
ebook:源資料 
ebookQueryResp:目標拷貝物件