1.创建实体类
@Entity
public class User implements UserDetails, Serializable {
public User() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(unique = true,nullable = false)
@Pattern(message = "用户名必须是6-16位数字或英文的组合",regexp = "^[0-9a-zA-Z]{6,16}$")
private String username;
@Column
@Length(min = 6,max = 16,message = "密码长度为6-16位")
private String password;
@Column
private String sex;
@Column
@Email(message = "邮箱格式错误")
private String email;
@Column
private String only_id; //专属码
@Column
private String us_time; //纪念日
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "user_role",joinColumns = @JoinColumn(name="user_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "id"))
private List<Role> roles;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return roles;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getOnly_id() {
return only_id;
}
public void setOnly_id(String only_id) {
this.only_id = only_id;
}
public String getUs_time() {
return us_time;
}
public void setUs_time(String us_time) {
this.us_time = us_time;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}
2.添加控制器以及开启效验
添加@Validated注解
在进入注册界面的方法添加一个对象,如果不添加,就会报如下错误
3.注册界面
th:errors的报错不用管,不影响
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>注册</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" href="/webjars/bootstrap/4.3.1/css/bootstrap.min.css">
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="/webjars/jquery/3.3.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="/webjars/bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container-fluid">
<form action="#" th:action="@{/registerUI}"method="post" th:method="post">
<div class="form-group">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" class="form-control" autofocus="autofocus" autocomplete="off">
<span th:if="${#fields.hasErrors('user.username')}" th:errors="${user.username}"></span>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" id="password" name="password" class="form-control">
<span th:if="${#fields.hasErrors('user.password')}" th:errors="${user.password}"></span>
</div>
<div class="form-group">
<label for="us_time">纪念日:</label>
<input type="text" id="us_time" name="us_time" autocomplete="off" class="form-control">
<span th:if="${#fields.hasErrors('user.us_time')}" th:errors="${user.us_time}"></span>
</div>
<div class="form-group">
<label for="email">email:</label>
<input type="text" id="email" name="email" autocomplete="off" class="form-control">
<span th:if="${#fields.hasErrors('user.email')}" th:errors="${user.email}"></span>
</div>
<div class="form-group">
<label for="only_id">专属码:</label>
<input type="text" id="only_id" name="only_id" autocomplete="off" class="form-control">
<span th:if="${#fields.hasErrors('user.only_id')}" th:errors="${user.only_id}"></span>
</div>
<label class="radio-inline"><input type="radio" name="sex">男</label>
<label class="radio-inline"><input type="radio" name="sex">女</label>
<div class="form-group">
<div class="offset-md-5">
<button type="submit" class="btn">提交</button>
</div>
</div>
</form>
</div>
<!--<ul th:if="${#fields.hasErrors('*')}">
<li th:each="err : ${#fields.errors('*')}" th:text="${err}">Input is incorrect</li>
</ul>-->
<div th:include="~{footer::footer}"></div>
</body>
</html>