Java編寫的實體返回VO工具
好久不見 最近些許有點懶惰 程序員嘛 每個月總會有幾天的 你懂得
那最近發(fā)現(xiàn)好的代碼寫出來真的會讓人有種賞心悅目的存在 相反就會有一種想掐死寫代碼的那個人
所以我最近寫了一個小工具 就是實體轉(zhuǎn)換VO對象的一個小工具 說到這里 如果你的第一反應(yīng)是 Spring的BeanUtils 那說明你肯定也有遇到過跟我一樣的問題
那具體是怎么做? (不考慮性能的情況下) 等下分析
先看下如果正常返回VO我們需要怎么去操作?
現(xiàn)在有一個用戶實體
import lombok.Data;
/**
* 用戶實體
*
* @author 是小張啊
* @since 2021-05-06
*/
@Data
public class User {
/**
* 用戶id
*/
private String id;
/**
* 用戶名稱(賬號)
*/
private String name;
/**
* 密碼(不加密)
*/
private String password;
}
現(xiàn)在需要返回一個VO的對象 即
import lombok.Data;
/**
* 用戶vo對象
* @author 是小張啊
* @since 2021-05-06
*/
@Data
public class UserVo {
/**
* 用戶id
*/
private String id;
/**
* 用戶名稱(賬號)
*/
private String name;
}
可以這樣處理
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 是小張啊
* @since 2021-05-06
*/
@RestController
public class UserController {
/**
* 查詢用戶
* @return
*/
@GetMapping("/select")
public UserVo select() {
User user = new User();
user.setId(1);
user.setName("是小張啊");
UserVo userVo = new UserVo();
BeanUtils.copyProperties(user, userVo);
return userVo;
}
}
這樣是沒有問題的 不談性能 這樣做是非常穩(wěn)的
現(xiàn)在有這樣的一個需求 需要返回一個 List<UserVo> 如果你能想到用 java8的lambda表達式的去使用Spring的BeanUtils 那也是不錯的
具體實現(xiàn)就是
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 是小張啊
* @since 2021-05-06
*/
@RestController
public class UserController {
/**
* 查詢用戶
* @return
*/
public List<UserVo> select() {
// 初始化數(shù)據(jù)
User user1 = new User();
user1.setId(1);
user1.setName("是小張啊");
User user2 = new User();
user2.setId(1);
user2.setName("是小張啊");
List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
// List<entity> -> List<vo>
List<UserVo> userVos = users.stream().map(user -> {
UserVo userVo = new UserVo();
BeanUtils.copyProperties(user, userVo);
return userVo;
}).collect(Collectors.toList());
return userVos;
}
}
這其實也挺不錯的 只是每次都這樣寫 屬實不美觀 如果能提取公共方法去調(diào)用就太舒服了 所以這個方法也是根據(jù) BeanUtils去優(yōu)化這個工具
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Bean 工具類
* @author 是小張啊
* @since 2021-05-06
*/
@Slf4j
public class Utils extends BeanUtils {
/**
* 將實體批量轉(zhuǎn)換成 vo對象
* 注:當(dāng)前只針對 List
*
* @param source 實體集合
* @param clazz 需要批量轉(zhuǎn)換成的對象
* @param <T>
* @param <S>
* @return
*/
@SneakyThrows
public static <T, S> List<T> conversionVo(List<S> source, Class<T> clazz) {
return source.stream().map(resources -> {
T t = null;
try {
// 利用反射 創(chuàng)建一個新的實例
t = clazz.newInstance();
BeanUtils.copyProperties(resources, t);
} catch (InstantiationException e) {
log.info("{}實例化失敗", clazz);
} catch (IllegalAccessException e) {
log.info("{}不可訪問", clazz);
}
return t;
}).collect(Collectors.toList());
}
}
這樣就很方便 只需要去調(diào)用即可
import top.lzmvlog.common.Utils;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @author 是小張啊
* @since 2021-05-06
*/
@RestController
public class UserController {
/**
* 查詢用戶
* @return
*/
public List<UserVo> select() {
// 初始化數(shù)據(jù)
User user1 = new User();
user1.setId(1);
user1.setName("是小張啊");
User user2 = new User();
user2.setId(1);
user2.setName("是小張啊");
List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
List<UserVo> userVos = Utils.conversionVo(users, UserVo.class);
return userVos;
}
}
BeanUtils 是有局限性的 你必須保證 實體的字段值和返回的VO字段值是一樣的
代碼寫到最后 其實就是一個不斷優(yōu)化的過程 領(lǐng)導(dǎo)來了 不能多說 得繼續(xù)搬磚去了
以上就是Java編寫的實體返回VO工具的詳細內(nèi)容,更多關(guān)于Java 實體返回VO工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
struts2攔截器_動力節(jié)點Java學(xué)院整理
如何使用struts2攔截器,或者自定義攔截器。下面通過實例代碼給大家分享struts2攔截器的相關(guān)知識,感興趣的朋友參考下吧2017-09-09
使用JMeter從JSON響應(yīng)的URL參數(shù)中提取特定值
在使用Apache JMeter進行API測試時,我們經(jīng)常需要從JSON格式的響應(yīng)中提取特定字段的值,這可以通過使用JMeter內(nèi)置的JSON提取器和正則表達式提取器來完成,本文介紹JMeter JSON提取特定值的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2024-03-03
SpringBoot配置SwaggerUI訪問404錯誤的解決方法
這篇文章主要為大家詳細介紹了SpringBoot配置SwaggerUI訪問404錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
SpringBoot整合Mybatis無法掃描xml文件的解決
這篇文章主要介紹了SpringBoot整合Mybatis無法掃描xml文件的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之隊列
這篇文章主要介紹了Java隊列數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),隊列是一種特殊的線性表,只允許在表的隊頭進行刪除操作,在表的后端進行插入操作,隊列是一個有序表先進先出,想了解更多相關(guān)資料的小伙伴可以參考下面文章的詳細內(nèi)容2022-02-02
Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解
今天帶小伙伴們學(xué)習(xí)一下Java并發(fā)編程之Java ConcurrentLinkedQueue源碼,本篇文章詳細分析了ConcurrentLinkedQueue源碼,有代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助喲,需要的朋友可以參考下2021-05-05

