所有的JavaBean和DTO的互相转换接口,JavaBean转化成DTO或者DTO转换JavaBean:

public abstract class Converter<A, B>  {protected abstract B doForward(A a);protected abstract A doBackward(B b);
}

一个JavaBean:

import lombok.Data;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Data
@Document(collection = "user")
public class User {@Idprivate ObjectId id;private String username;private String password;
}

对应的DTO,无参构造方法,以及全部参数方法of,以及私有静态内部类继承抽象类Convert并实现两个转换方法:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.BeanUtils;
import study.Converter;import javax.validation.constraints.NotNull;@NoArgsConstructor
@AllArgsConstructor(staticName = "of")
@Data
public class UserDTO {/*** AllArgsConstructor注解和NotNull注解配合使用,参数不为null*/@NotNull(message = "username is null")private String username;@NotNull(message = "password is null")private String password;public User convertToUser(){UserDTOConvert userDTOConvert = new UserDTOConvert();User convert = userDTOConvert.doForward(this);return convert;}public UserDTO convertFor(User user){UserDTOConvert userDTOConvert = new UserDTOConvert();UserDTO convert = userDTOConvert.doBackward(user);return convert;}private static class UserDTOConvert extends Converter<UserDTO, User> {@Overrideprotected User doForward(UserDTO userDTO) {User user = new User();BeanUtils.copyProperties(userDTO,user);return user;}@Overrideprotected UserDTO doBackward(User user) {UserDTO userDTO = new UserDTO();BeanUtils.copyProperties(user,userDTO);return userDTO;}}
}

Controller中一个方法接受DTO参数,使用注解@Valid配合DTO属性上注解@NotNull使用;

接受参数,持久化,返回对象,如此优雅。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;@RestController
@RequestMapping(value = "/api/user")
public class UserController {@Autowiredprivate UserService userService;@PostMappingpublic UserDTO addUser(@Valid UserDTO userDTO){User user = userDTO.convertToUser();User addUser = userService.addUser(user);UserDTO result = userDTO.convertFor(addUser);return result;}
}

来源:

https://www.itcodemonkey.com/article/6309.html?tdsourcetag=s_pctim_aiomsg

转载于:https://www.cnblogs.com/theRhyme/p/10529456.html

一个JavaBean和DTO转换的优秀案例相关推荐

  1. java dto 转换_json dto javabean转换工具类

    [java]代码库package com.slb.webservice.servlet; import java.io.IOException; import java.util.ArrayList; ...

  2. javabean与json转换(fastjson与jackson两个版本)

    [README] 本文演示了 javabean与json转换的开发方式: 要想 javabean的属性名 与 json的字段名不一致,也是可以转换的: 之前需要引入 ali.fastjson < ...

  3. matlab数字图像处理大作业_线上教学优秀案例(16) | 数字图像处理基于蓝墨云+企业微信的线上教学经验分享...

    [前言]目前我校在线课堂教学如火如荼,老师们在各大教学平台化身"直播高手""网课达人"倾心打造精彩课堂,有效保证了在线学习与线下课堂教学质量实质等效.为进一步推 ...

  4. 如何做数据竞赛·优秀案例学习(DC03)

    2019年腾讯广告算法大赛冠军思路.代码(PART 3) 方案地址:https://zhuanlan.zhihu.com/p/73062485 代码地址:https://github.com/guod ...

  5. 重磅!CSDN 发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单...

    2020 年无疑是特殊的一年,AI 在开年的这场"战疫"中表现出惊人的力量.站在"新十年"的起点上,CSDN发起[百万人学AI]评选活动.我们继续聚焦AI的技术 ...

  6. 官宣!CSDN 重磅发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单...

    2020 年无疑是特殊的一年,AI 在开年的这场"战疫"中表现出惊人的力量.站在"新十年"的起点上,CSDN发起[百万人学AI]评选活动.我们继续聚焦AI的技术 ...

  7. 优秀案例:12个精美的设计工作室 设计公司网站

    如果你正在为自己的作品集网站设计寻找灵感,那么学习设计机构 & 设计公司的网站是如何制作的是一个良好的开端.在这篇稳重,我们已经聚集了一组设计机构的优秀作品集网站,你可以借鉴很多设计理念.当你 ...

  8. IDEA使用GsonFormat完成JSON和JavaBean之间的转换

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客:点 ...

  9. 神策数据荣获“2017金融科技·大数据优秀案例之最佳实践案例奖”

    当前,金融市场活跃度不断提升,业务模式不断创新,金融领域数据量呈爆炸式增长,蓬勃发展的大数据产业给金融业的发展带来了新机遇,也提出了新的挑战. 6 月 29 日, 「数据猿·超声波」之金融科技­商业价 ...

最新文章

  1. 微信小程序开源项目库汇总-持续更新
  2. [转]自适应网页设计(Responsive Web Design)
  3. 谣言粉碎机 - 极短时间内发送两个Odata request,前一个会自动被cancel掉?
  4. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性
  5. 英特网rst服务器未在运行,技术员示范win7系统提示“英特尔(R)RST服务未在运行”的详细办法...
  6. java实现redis客户端_windows下java swt实现操作redis的客户端工具
  7. 知方可补不足~UPDLOCK更新锁的使用
  8. volatile 线程内存模型
  9. 【web组件库系列】纯CSS实现典型网页数据分页器
  10. Python基本数据类型之字典
  11. 信号与系统(十七)—— 傅里叶变换及性质(1)常用函数的傅里叶变换
  12. 服务器lga771芯片组,LGA775主板改造用771 CPU教程
  13. 苹果公司:苹果商店App价格将调整 多个国家地区受影响
  14. 你天天努力的碎片化学习,为什么还在每天挤地铁?
  15. 2021版《数据结构》课程学习指南
  16. BT源代码学习心得(六):跟踪服务器(Tracker)的代码分析(初始化) -- 转贴自 wolfenstein (NeverSayNever)
  17. 北京大学肖臻老师《区块链技术与应用》公开课笔记23——ETH挖矿难度调整篇
  18. mysql和ocr_图文识别OCR的作用和优势是什么?
  19. hive常用函数之七字符串函数
  20. 华为鸿蒙应用名称,国产自主系统名字定了 华为鸿蒙商标已注册公告

热门文章

  1. html中嵌入天气预报
  2. [原]请留心asp:Image控件中的ImageUrl属性
  3. 高动态范围(HDR)
  4. 回归框架下的人脸对齐和三维重建
  5. 十大编程算法助程序员走上高手之路
  6. 开源项目 eRedG4_V1.03.1发布
  7. Android应用程序框架
  8. 全网最详细的大数据集群环境下如何正确安装并配置多个不同版本的Cloudera Hue(图文详解)...
  9. boost::filesystem经常使用使用方法具体解释
  10. shell下输出字体颜色