多平台统一管理软件接口,如何实现多平台统一管理软件接口
269
2022-10-25
Java编写的实体返回VO工具
好久不见 最近些许有点懒惰 程序员嘛 每个月总会有几天的 你懂得
那最近发现好的代码写出来真的会让人有种赏心悦目的存在 相反就会有一种想掐死写代码的那个人
所以我最近写了一个小工具 就是实体转换VO对象的一个小工具 说到这里 如果你的第一反应是 Spring的BeanUtils 那说明你肯定也有遇到过跟我一样的问题
那具体是怎么做? (不考虑性能的情况下) 等下分析
先看下如果正常返回VO我们需要怎么去操作?
现在有一个用户实体
import lombok.Data;
/**
* 用户实体
*
* @author 是小张啊
* @since 2021-05-06
*/
@Data
public class User {
/**
* 用户id
*/
private String id;
/**
* 用户名称(账号)
*/
private String name;
/**
* 密码(不加密)
*/
private String password;
}
现在需要返回一个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;
}
}
这样是没有问题的 不谈性能 这样做是非常稳的
现在有这样的一个需求 需要返回一个 List
具体实现就是
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
// 初始化数据
User user1 = new User();
user1.setId(1);
user1.setName("是小张啊");
User user2 = new User();
user2.setId(1);
user2.setName("是小张啊");
List
users.add(user1);
users.add(user2);
// List
List
UserVo userVo = new UserVo();
BeanUtils.copyProperties(user, userVo);
return userVo;
}).collect(Collectors.toList());
return userVos;
}
}
这其实也挺不错的 只是每次都这样写 属实不美观 如果能提取公共方法去调用就太舒服了 所以这个方法也是根据 BeanUtils去优化这个工具
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 {
/**
* 将实体批量转换成 vo对象
* 注:当前只针对 List
*
* @param source 实体集合
* @param clazz 需要批量转换成的对象
* @param
* @param
* @return
*/
@SneakyThrows
public static source, Class
return source.stream().map(resources -> {
T t = null;
try {
// 利用反射 创建一个新的实例
t = clazz.newInstance();
BeanUtils.copyProperties(resources, t);
} catch (InstantiationException e) {
log.info("{}实例化失败", clazz);
} catch (IllegalAccessException e) {
log.info("{}不可访问", clazz);
}
return t;
}).collect(Collectors.toList());
}
}
这样就很方便 只需要去调用即可
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
// 初始化数据
User user1 = new User();
user1.setId(1);
user1.setName("是小张啊");
User user2 = new User();
user2.setId(1);
user2.setName("FjsaFLBZ是小张啊");
List
users.add(user1);
users.add(user2);
List
return userVos;
}
}
BeanUtils 是有局限性的 你必须保证 实体的字段值和返回的VO字段值是一样的
代码写到最后 其实就是一个不断优化的过程 领导来了 不能多说 得继续搬砖去了
以上就是Java编写的实体返回VO工具的详细内容,更多关于Java 实体返回VO工具的资料请关注我们其它相关文章!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
评论列表