一个JavaBean和DTO转换的优秀案例
所有的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转换的优秀案例相关推荐
- java dto 转换_json dto javabean转换工具类
[java]代码库package com.slb.webservice.servlet; import java.io.IOException; import java.util.ArrayList; ...
- javabean与json转换(fastjson与jackson两个版本)
[README] 本文演示了 javabean与json转换的开发方式: 要想 javabean的属性名 与 json的字段名不一致,也是可以转换的: 之前需要引入 ali.fastjson < ...
- matlab数字图像处理大作业_线上教学优秀案例(16) | 数字图像处理基于蓝墨云+企业微信的线上教学经验分享...
[前言]目前我校在线课堂教学如火如荼,老师们在各大教学平台化身"直播高手""网课达人"倾心打造精彩课堂,有效保证了在线学习与线下课堂教学质量实质等效.为进一步推 ...
- 如何做数据竞赛·优秀案例学习(DC03)
2019年腾讯广告算法大赛冠军思路.代码(PART 3) 方案地址:https://zhuanlan.zhihu.com/p/73062485 代码地址:https://github.com/guod ...
- 重磅!CSDN 发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单...
2020 年无疑是特殊的一年,AI 在开年的这场"战疫"中表现出惊人的力量.站在"新十年"的起点上,CSDN发起[百万人学AI]评选活动.我们继续聚焦AI的技术 ...
- 官宣!CSDN 重磅发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单...
2020 年无疑是特殊的一年,AI 在开年的这场"战疫"中表现出惊人的力量.站在"新十年"的起点上,CSDN发起[百万人学AI]评选活动.我们继续聚焦AI的技术 ...
- 优秀案例:12个精美的设计工作室 设计公司网站
如果你正在为自己的作品集网站设计寻找灵感,那么学习设计机构 & 设计公司的网站是如何制作的是一个良好的开端.在这篇稳重,我们已经聚集了一组设计机构的优秀作品集网站,你可以借鉴很多设计理念.当你 ...
- IDEA使用GsonFormat完成JSON和JavaBean之间的转换
点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客:点 ...
- 神策数据荣获“2017金融科技·大数据优秀案例之最佳实践案例奖”
当前,金融市场活跃度不断提升,业务模式不断创新,金融领域数据量呈爆炸式增长,蓬勃发展的大数据产业给金融业的发展带来了新机遇,也提出了新的挑战. 6 月 29 日, 「数据猿·超声波」之金融科技商业价 ...
最新文章
- 微信小程序开源项目库汇总-持续更新
- [转]自适应网页设计(Responsive Web Design)
- 谣言粉碎机 - 极短时间内发送两个Odata request,前一个会自动被cancel掉?
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性
- 英特网rst服务器未在运行,技术员示范win7系统提示“英特尔(R)RST服务未在运行”的详细办法...
- java实现redis客户端_windows下java swt实现操作redis的客户端工具
- 知方可补不足~UPDLOCK更新锁的使用
- volatile 线程内存模型
- 【web组件库系列】纯CSS实现典型网页数据分页器
- Python基本数据类型之字典
- 信号与系统(十七)—— 傅里叶变换及性质(1)常用函数的傅里叶变换
- 服务器lga771芯片组,LGA775主板改造用771 CPU教程
- 苹果公司:苹果商店App价格将调整 多个国家地区受影响
- 你天天努力的碎片化学习,为什么还在每天挤地铁?
- 2021版《数据结构》课程学习指南
- BT源代码学习心得(六):跟踪服务器(Tracker)的代码分析(初始化) -- 转贴自 wolfenstein (NeverSayNever)
- 北京大学肖臻老师《区块链技术与应用》公开课笔记23——ETH挖矿难度调整篇
- mysql和ocr_图文识别OCR的作用和优势是什么?
- hive常用函数之七字符串函数
- 华为鸿蒙应用名称,国产自主系统名字定了 华为鸿蒙商标已注册公告