springboot 專案實戰-03章-封裝通用類,請求和返回體
阿新 • • 發佈:2022-03-24
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:目標拷貝物件