Java编写的实体返回VO工具

java编写的实体返回VO工具

好久不见 最近些许有点懒惰 程序员嘛 每个月总会有几天的 你懂得

那最近发现好的代码写出来真的会让人有种赏心悦目的存在 相反就会有一种想掐死写代码的那个人

所以我最近写了一个小工具 就是实体转换VO对象的一个小工具 说到这里 如果你的第一反应是 Spring的BeanUtils 那说明你肯定也有遇到过跟我一样的问题

那具体是怎么做? (不考虑性能的情况下) 等下分析

先看下如果正常返回VO我们需要怎么去操作?

现在有一个用户实体

import lombok.Data;

@Data

public class User {

private String id;



private String name;



private String password;

}

现在需要返回一个VO的对象 即

import lombok.Data;

@Data

public class UserVo {

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;

@RestController

public class UserController {

@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 如果你能想到用 java8的lambda表达式的去使用Spring的BeanUtils 那也是不错的

具体实现就是

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;

@RestController

public class UserController {

public List select() {

    // 初始化数据

    User user1=new User();

    user1.setId(1);

    user1.setName("是小张啊");

    User user2=new User();

    user2.setId(1);

    user2.setName("是小张啊");

    List users=new ArrayList<>();

    users.add(user1);

    users.add(user2);

    // List -> List

    List userVos=users.stream().map(user -> {

        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;

@Slf4j

public class Utils extends BeanUtils {

@SneakyThrows

public static  List conversionVo(List source, Class clazz) {

    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;

@RestController

public class UserController {

public List select() {

    // 初始化数据

    User user1=new User();

    user1.setId(1);

    user1.setName("是小张啊");

    User user2=new User();

    user2.setId(1);

    user2.setName("FjsaFLBZ是小张啊");

    List users=new ArrayList<>();

    users.add(user1);

    users.add(user2);

    List userVos=Utils.conversionVo(users, UserVo.class);

    return userVos;

}

}

BeanUtils 是有局限性的 你必须保证 实体的字段值和返回的VO字段值是一样的

代码写到最后 其实就是一个不断优化的过程 领导来了 不能多说 得继续搬砖去了

以上就是Java编写的实体返回VO工具的详细内容,更多关于Java 实体返回VO工具的资料请关注我们其它相关文章!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值