实体类转换DTO的方式

news/2024/7/24 9:31:13

背景:在对外传输数据展示过程中,为了避免model层直接对外暴露,我们会多加一个对应的DTO保理想要传输的数据即可,隐藏model层。

应对: 
1.第一种,如果是实体类字段类型都一样,大部分会采用bean拷贝的方式,BeanUtils.copyProperties(obj,obj),单个对象的转换还好,但是List对象就要循环来转换。

2.第二种,要是遇到驼峰类型字段与下划线字段的对象进行转换也是头疼,由于可能接口跟实体类不是一波人写的,在一致性上没用做统一的规范,导致model和DTO的字段类型还不一样。这种fastJson有对应的转换
 

/**
     * 将对象的大写转换为下划线加小写,例如:userName-->user_name
     *
     * tar 目标对象
     * to 转换对象
     * @return
     * @throws Exception
     */
    public static Object toUnderline(Object tar,Object to) throws Exception {
        SerializeConfig config = new SerializeConfig();
        config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
        String json=JSON.toJSONString(tar,config);
        return JSON.parseObject(json, to.getClass());
    }

SnakeCase 就是一种转换下划线的策略,当然也是可以互转的,只要修改策略的枚举值为CamelCase,就转为驼峰。

3.第三种,为了保持我们提供的接口代码尽量的简洁,当然不希望语句块中存在无关逻辑的转换实体类的语句,相对来说modelmapper提供了一个比较好的方式 
pom依赖
 

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>${modelmapper.version}</version>
</dependency>
ModelMapper modelMapper = new ModelMapper();
//单个转换
ProductInfo productInfo = service.getOne();
ProductInfoDto dto = modelMapper.map(productInfo,ProductInfoDto.calss);

//list转换
 List<ProductInfo> productInfos =service.getList();
            List<ProductInfoDto> productInfoDtos = modelMapper.map(productInfos, new TypeToken<List<ProductInfoDto>>() {
            }.getType());

 

 


http://www.niftyadmin.cn/n/1250874.html

相关文章

java中new与static分析

抱怨java的new浪费了太多的内存&#xff0c;应该大量的使用static 前半句在某些情况下正确&#xff0c;后半句绝对错误。 说这话的是完全不懂对象&#xff0c;完全没有OO基础知识&#xff0c;但是这些人还在从事Java/.NET等OO软件开发&#xff0c;相当于外行人冒充内行&#xf…

为什么说移动端该放弃rem适配方案了?

作者&#xff1a;去伪存真https://juejin.cn/post/70849266460330557521.背景在做移动端各种尺寸屏幕的适配时&#xff0c;用的最多的就是rem方案。我们都写过这样的代码,来设置根字体大小。这个计算公式中设备宽度&#xff0c;UI设计稿尺寸这两个参数比较好理解&#xff0c;可…

如何使用 IntelliJ IDEA中配置PHP开发环境 及项目搭建

首先我们这里使用WANPServer WampServer是一款由法国人开发的Apache Web服务器、PHP解释器以及MySQL数据库的整合软件包。免去了开发人员将时间花费在繁琐的配置环境过程&#xff0c;从而腾出更多精力去做开发。 WampServer就是Windows Apache Mysql PHP集成安装环境&#xf…

过度使用懒加载的弊端

懒加载的过度使用会给应用性能带来负面影响。所以在这篇文章中&#xff0c;会详述懒加载对性能的影响&#xff0c;来帮助你理解应该何时使用它。什么是懒加载&#xff1f;懒加载是一种常见的技术&#xff0c;通过按需加载资源来减少网页的数据使用。如今懒加载已经是一种 Web 标…

IntelliJ IDEA中用谷歌浏览器打开页面,出现windows 找不到文件chrome

1.右击谷歌浏览器快捷方式打开文件位置。如&#xff1a; 2. 打开IntelliJ IDEA软件&#xff0c;找到file–>settings–>找到Web Browsers。 3.在chrome那一栏最右边的path中选择chrome.exe文件就可以了 4、点击应用和保存,然后再次点击chrome按钮&#xff0c;就可以啦&…

现在面试都问什么「字节、蚂蚁、美团、滴滴面试小记」

写在前面笔者三年工作经验&#xff0c;平时工作上也会技术面试一些候选人&#xff0c;听江湖上传闻三年是个坎&#xff0c;目前刚好也有三年没有出来面试了&#xff0c;想出来考验考验自身功底如何&#xff1f;&#x1f643;主要投递了一些可视化与基础设施建设相关方向的职位&…

java学习之静态代理

一、概述 代理是一种模式&#xff0c;提供了对目标对象的间接访问方式&#xff0c;即通过代理访问目标对象。如此便于在目标实现的基础上增加额外的功能操作&#xff0c;前拦截&#xff0c;后拦截等&#xff0c;以满足自身的业务需求&#xff0c;同时代理模式便于扩展目标对象…

localStorage 的高阶用法

很多人在用 localStorage 或 sessionStorage 的时候喜欢直接用&#xff0c;明文存储&#xff0c;直接将信息暴露在&#xff1b;浏览器中&#xff0c;虽然一般场景下都能应付得了且简单粗暴&#xff0c;但特殊需求情况下&#xff0c;比如设置定时功能&#xff0c;就不能实现。就…