背景
最近在从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("未上线");
}