From ace1393483b9ec63431adae0e6c5cc3182b5befa Mon Sep 17 00:00:00 2001 From: sxbpoi7127 Date: Tue, 9 Mar 2021 23:56:45 +0800 Subject: [PATCH] register --- .../projects/user/constant/RegexConstant.java | 21 ++++++ .../geektimes/projects/user/domain/User.java | 41 +++++++++- .../user/service/UserServiceImpl.java | 2 +- .../user/validator/bean/validation/Edit.java | 10 +++ .../bean/validation/PasswordConstraint.java | 29 ++++++++ .../bean/validation/PasswordValidator.java | 31 ++++++++ .../validator/bean/validation/Register.java | 10 +++ .../geektimes/projects/user/vo/BizUserVO.java | 74 +++++++++++++++++++ .../web/controller/HelloWorldController.java | 35 +++++++++ 9 files changed, 249 insertions(+), 4 deletions(-) create mode 100644 projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/constant/RegexConstant.java create mode 100644 projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Edit.java create mode 100644 projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordConstraint.java create mode 100644 projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordValidator.java create mode 100644 projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Register.java create mode 100644 projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/vo/BizUserVO.java diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/constant/RegexConstant.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/constant/RegexConstant.java new file mode 100644 index 0000000..2b44321 --- /dev/null +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/constant/RegexConstant.java @@ -0,0 +1,21 @@ +package org.geektimes.projects.user.constant; + +/** + * @desc: + * @author: poi + * @date: 2021/3/9 + * @version: v1.0 + */ +public class RegexConstant { + + /** + * 11位 + */ + public static final String ELEVEN_NUMBER_EREGEXP = "^\\d{11}$"; + + + /** + * 非负整数 + */ + public static final String NUMBER = "^[1-9]\\d*|0$"; +} diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/domain/User.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/domain/User.java index c309ccf..dbb957d 100644 --- a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/domain/User.java +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/domain/User.java @@ -20,15 +20,12 @@ public class User implements Serializable { @Id @GeneratedValue(strategy = AUTO) - @NotNull private Long id; @Column private String name; @Column - @Max(32) - @Min(6) private String password; @Column @@ -37,6 +34,16 @@ public class User implements Serializable { @Column private String phoneNumber; + public User() { + } + + public User(String name, String password, String email, String phoneNumber) { + this.name = name; + this.password = password; + this.email = email; + this.phoneNumber = phoneNumber; + } + public Long getId() { return id; } @@ -90,6 +97,34 @@ public class User implements Serializable { return Objects.hash(id, name, password, email, phoneNumber); } + public static User.Builder builder() { + return new User.Builder(); + } + + public static class Builder{ + private Long id; + private String name; + private String password; + private String email; + private String phoneNumber; + + public Builder basicInfo(String name, String password, String phoneNumber){ + this.name = name; + this.password = password; + this.phoneNumber = phoneNumber; + return this; + } + + public Builder setEmail(String email){ + this.email = email; + return this; + } + + public User builder(){ + return new User(this.name, this.password, this.email, this.phoneNumber); + } + } + @Override public String toString() { return "User{" + diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/service/UserServiceImpl.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/service/UserServiceImpl.java index 6b6c7d6..6b66785 100644 --- a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/service/UserServiceImpl.java +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/service/UserServiceImpl.java @@ -27,7 +27,7 @@ public class UserServiceImpl implements UserService { entityManager.persist(user); // 调用其他方法方法 - update(user); // 涉及事务 +// update(user); // 涉及事务 // register 方法和 update 方法存在于同一线程 // register 方法属于 Outer 事务(逻辑) // update 方法属于 Inner 事务(逻辑) diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Edit.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Edit.java new file mode 100644 index 0000000..f99e17f --- /dev/null +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Edit.java @@ -0,0 +1,10 @@ +package org.geektimes.projects.user.validator.bean.validation; + +/** + * @desc: + * @author: poi + * @date: 2021/3/9 + * @version: v1.0 + */ +public class Edit { +} diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordConstraint.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordConstraint.java new file mode 100644 index 0000000..e559549 --- /dev/null +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordConstraint.java @@ -0,0 +1,29 @@ +package org.geektimes.projects.user.validator.bean.validation; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @desc: + * @author: poi + * @date: 2021/3/9 + * @version: v1.0 + */ +@Target({ElementType.METHOD, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = {PasswordValidator.class}) +public @interface PasswordConstraint { + String message() default "密码长度在6~32位之间"; + + int minSize() default 6; + + int maxSize() default 32; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordValidator.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordValidator.java new file mode 100644 index 0000000..6508a2a --- /dev/null +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/PasswordValidator.java @@ -0,0 +1,31 @@ +package org.geektimes.projects.user.validator.bean.validation; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * @desc: + * @author: poi + * @date: 2021/3/9 + * @version: v1.0 + */ +public class PasswordValidator implements ConstraintValidator { + private PasswordConstraint passwordConstraint; + + @Override + public void initialize(PasswordConstraint constraintAnnotation) { + this.passwordConstraint = constraintAnnotation; + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { + if(null == value){ + return false; + } + + if(value.length() < passwordConstraint.minSize() || value.length() > passwordConstraint.maxSize()){ + return false; + } + return true; + } +} diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Register.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Register.java new file mode 100644 index 0000000..5abd8fb --- /dev/null +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/validator/bean/validation/Register.java @@ -0,0 +1,10 @@ +package org.geektimes.projects.user.validator.bean.validation; + +/** + * @desc: + * @author: poi + * @date: 2021/3/9 + * @version: v1.0 + */ +public class Register { +} diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/vo/BizUserVO.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/vo/BizUserVO.java new file mode 100644 index 0000000..e0bb089 --- /dev/null +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/vo/BizUserVO.java @@ -0,0 +1,74 @@ +package org.geektimes.projects.user.vo; + +import org.geektimes.projects.user.constant.RegexConstant; +import org.geektimes.projects.user.validator.bean.validation.Edit; +import org.geektimes.projects.user.validator.bean.validation.PasswordConstraint; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * @desc: + * @author: poi + * @date: 2021/3/9 + * @version: v1.0 + */ +public class BizUserVO { + + @NotNull(groups = Edit.class) + private Long id; + + @PasswordConstraint(minSize = 6, maxSize = 32) + private String password; + + private String name; + + // 可自己扩展正则,正则不熟悉 可再次自定义注解实现 + @Pattern(regexp = RegexConstant.ELEVEN_NUMBER_EREGEXP, message = "手机号码只能11位") + private String phone; + + private String email; + + public BizUserVO() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java index 2cf4449..dfe2e1e 100644 --- a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java @@ -1,18 +1,30 @@ package org.geektimes.projects.user.web.controller; +import org.geektimes.projects.user.domain.User; +import org.geektimes.projects.user.service.UserService; +import org.geektimes.projects.user.validator.bean.validation.Edit; +import org.geektimes.projects.user.vo.BizUserVO; import org.geektimes.web.mvc.controller.PageController; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.validation.ConstraintViolation; +import javax.validation.Valid; +import javax.validation.Validation; +import javax.validation.Validator; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; +import java.util.Set; /** * 输出 “Hello,World” Controller */ @Path("/hello") public class HelloWorldController implements PageController { + @Resource(name = "userService") + private UserService userService; @GET @POST @@ -20,4 +32,27 @@ public class HelloWorldController implements PageController { public String execute(HttpServletRequest request, HttpServletResponse response) throws Throwable { return "index.jsp"; } + + + /** + * 注册用户 + * @param userVO 用户信息vo + * @return + */ + @POST + @Path("/registerUser") + public String registerUser(@Valid BizUserVO userVO) throws Exception { + // 效验 @Validated() + Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + Set> validate = validator.validate(userVO, Edit.class); + if(null != validate && validate.size() > 0){ + throw new Exception(validate.iterator().next().getMessage()); + } + + User user = User.builder() + .basicInfo(userVO.getName(), userVO.getPassword(), userVO.getPhone()) + .setEmail(userVO.getEmail()).builder(); + userService.register(user); + return "success_add_user.jsp"; + } } -- Gitee