背景
最近在從php轉java,發現好多都是不一樣的。
我從數據庫中取一個表的數據,但是返回給前端的時候,可能會新增字段。比如新增對狀態的標註,在數據庫表中的字段可能是status=0,但是展示給前端的時候需要新增一個字段statusStr=“未上線”
除了這種數據庫的情況,還包括調用別人接口返回的結構,需要加工後返回給需求方
在php中只要在返回的數組中新增個字段就可以了,因爲在php中基本上都是數組解決問題;但是在java中是完全換了一種思路解決這種問題,在java所有的都是類,用類來解決問題。
id | status | name |
---|---|---|
123 | 0 | 小忍 |
php解決
原有的
$arrRes = [
"id" => 123,
"status" => 0,
"name" => "小忍",
];
解決之後
$arrRes = [
"id" => 123,
"status" => 0,
"name" => "小忍",
"statusStr" => "未上線",
];
java解決
對應DB中表的結構數據,如果前端要的是從數據庫表中存的數據是ok的。
public static class Ret {
private int id;
private int status;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
傳給前端的字段會有不同,可能會新增字段,可能需要格式化時間,格式化json串等。
public static class FrontRet {
private int id;
private int status;
private String name;
private String statusStr;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStatusStr() {
return statusStr;
}
public void setStatusStr(String statusStr) {
this.statusStr = statusStr;
}
具體操作
BeanUtils.copyProperties
遵循的原則必須是字段和類型一致才能copy到新的類中
// 1. 從數據庫表中撈取的結構
Ret ret = RetMapper.selectByPrimaryKey(id);
// 2. 創建返回給前端的類結構
FrontRet frontRet = new FrontRet();
// 3. 將數據表的結構copy到frontRet,遵循的原則必須是字段和類型一致才能copy到新的類中
BeanUtils.copyProperties(ret, frontRet);
// 4. 操作需要返回的字段
if (ret.getStatus() == 0) {
frontRet.setStatusStr("未上線");
}
// 5. 最終返回
return frontRet;
利用Json轉成新的對象
// 1. 從數據庫表中撈取的結構
Ret ret = RetMapper.selectByPrimaryKey(id);
// 2. 將ret轉爲json串,
String str = JSON.toJSONString(ret);
// 3. 將json串轉成要返回的結構FrontRet
FrontRet frontRet = JSON.parseObject(str, FrontRet.class);
// 4. 操作需要返回的字段
if (ret.getStatus() == 0) {
frontRet.setStatusStr("未上線");
}