看了这部门代码往后,你也许会问,那逆向转化会有什么用呢?着实我们有许多小的营业需求中,入参和出参是一样的,那么我们变可以轻松的举办转化,我将上边所提到的 UserInputDTO 和 UserOutputDTO 都转成 UserDTO 展示给各人。
DTO:
- public class UserDTO {
- private String username;
- private int age;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public User convertToUser(){
- UserDTOConvert userDTOConvert = new UserDTOConvert();
- User convert = userDTOConvert.convert(this);
- return convert;
- }
- public UserDTO convertFor(User user){
- UserDTOConvert userDTOConvert = new UserDTOConvert();
- UserDTO convert = userDTOConvert.reverse().convert(user);
- return convert;
- }
- private static class UserDTOConvert extends Converter<UserDTO, User> {
- @Override
- protected User doForward(UserDTO userDTO) {
- User user = new User();
- BeanUtils.copyProperties(userDTO,user);
- return user;
- }
- @Override
- protected UserDTO doBackward(User user) {
- UserDTO userDTO = new UserDTO();
- BeanUtils.copyProperties(user,userDTO);
- return userDTO;
- }
- }
- }
API:
- @PostMapping
- public UserDTO addUser(UserDTO userDTO){
- User user = userDTO.convertToUser();
- User saveResultUser = userService.addUser(user);
- UserDTO result = userDTO.convertFor(saveResultUser);
- return result;
- }
虽然,上述只是表白了转化偏向的正向或逆向,许多营业需求的出参和入参的 DTO 工具是差异的,那么你必要更明明的汇报措施:逆向是无法挪用的:
- private static class UserDTOConvert extends Converter<UserDTO, User> {
- @Override
- protected User doForward(UserDTO userDTO) {
- User user = new User();
- BeanUtils.copyProperties(userDTO,user);
- return user;
- }
- @Override
- protected UserDTO doBackward(User user) {
- throw new AssertionError("不支持逆向转化要领!");
- }
- }
看一下 doBackward 要领,直接抛出了一个断言非常,而不是营业非常,这段代码汇报代码的挪用者,这个要领不是准你挪用的,假如你挪用,我就”断言”你挪用错误了。
关于非常处理赏罚的更具体先容,可以参考我之前的文章:怎样优雅的计划 Java 非常(http://lrwinx.github.io/2016/04/28/%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E7%9A%84%E8%AE%BE%E8%AE%A1java%E5%BC%82%E5%B8%B8/) ,应该可以帮你更好的领略非常。
bean 的验证
假如你以为我上边写的谁人添加用户 API 写的已经很是美满了,那只能声名你还不是一个优越的措施员。我们应该担保任何数据的入参到要领体内都是正当的。
为什么要验证
许多人会汇报我,假如这些 API 是提供应前端举办挪用的,前端城市举办验证啊,你为什还要验证?
着实谜底是这样的,我从不信托任何挪用我 API 可能要领的人,好比前端验证失败了,可能某些人通过一些非凡的渠道(好比 Charles 举办抓包),直接将数据传入到我的 API,那我如故举办正常的营业逻辑处理赏罚,那么就有也许发生脏数据!
“对付脏数据的发生必然是致命”,这句话但愿各人紧记在心,再小的脏数据也有也许让你找几个彻夜!
jsr 303验证
hibernate 提供的 jsr 303 实现,我认为今朝如故是很优越的,详细怎样行使,我不想讲,由于谷歌上你可以搜刮出许多谜底! (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|