再以上班的 API 实例举办声名,我们此刻对 DTO 数据举办搜查:
- public class UserDTO {
- @NotNull
- private String username;
- @NotNull
- private int age;
- //其他代码略
- }
API 验证:
- @PostMapping
- public UserDTO addUser(@Valid UserDTO userDTO){
- User user = userDTO.convertToUser();
- User saveResultUser = userService.addUser(user);
- UserDTO result = userDTO.convertFor(saveResultUser);
- return result;
- }
我们必要将验证功效传给前端,这种非常应该转化为一个 api 非常(带有错误码的非常)。
- @PostMapping
- public UserDTO addUser(@Valid UserDTO userDTO, BindingResult bindingResult){
- checkDTOParams(bindingResult);
- User user = userDTO.convertToUser();
- User saveResultUser = userService.addUser(user);
- UserDTO result = userDTO.convertFor(saveResultUser);
- return result;
- }
- private void checkDTOParams(BindingResult bindingResult){
- if(bindingResult.hasErrors()){
- //throw new 带验证码的验证错误非常
- }
- }
BindingResult 是 Spring MVC 验证 DTO 后的一个功效集,可以参考spring 官方文档(http://spring.io/)。
搜查参数后,可以抛出一个“带验证码的验证错误非常”,详细非常计划可以参考怎样优雅的计划 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/)。
拥抱 lombok
上边的 DTO 代码,已经让我看的很累了,我信托读者也是一样,看到那么多的 Getter 和 Setter 要领,太急躁了,当时辰有什么要领可以简化这些呢。
请拥抱 lombok,它会辅佐我们办理一些让我们很急躁的题目
去掉 Setter 和 Getter
其拭魅这个问题,我不太想说,由于网上太多,可是由于许多人汇报我,他们基础就不知道 lombok 的存在,所觉得了让读者更好的进修,我乐意写这样一个例子:
- @Setter
- @Getter
- public class UserDTO {
- @NotNull
- private String username;
- @NotNull
- private int 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) {
- throw new AssertionError("不支持逆向转化要领!");
- }
- }
- }
看到了吧,烦人的 Getter 和 Setter 要领已经去掉了。
可是上边的例子基础不敷以浮现 lombok 的强盛。我但愿写一些网上很难查到,可能很少人举办声名的 lombok 的行使以及在行使时措施语义上的声名。
好比:@Data,@AllArgsConstructor,@NoArgsConstructor..这些我就不举办逐一声名白,请各人自行查询资料。
bean 中的链式气魄威风凛凛
什么是链式气魄威风凛凛?我来举个例子,看下面这个 Student 的 bean:
- public class Student {
- private String name;
- private int age;
- public String getName() {
- return name;
- }
- public Student setName(String name) {
- this.name = name;
- return this;
- }
- public int getAge() {
- return age;
- }
- public Student setAge(int age) {
- return this;
- }
- }
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|