The*_*are 10 java validation spring controller
我想验证我的表单,但这不起作用。我的实体类
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
@Entity
@Table(name = "users")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id")
private Integer id;
@NotNull
@Size(max = 20)
@Column(name = "username")
private String username;
@NotNull
@Size(max = 20)
@Column(name = "password")
private String password;
@NotNull
@Size(max = 20)
@Column(name = "firstName")
private String firstName;
@NotNull
@Size(max = 20)
@Column(name = "lastName")
private String lastName;
@Size(min = 11, max = 11)
@Column(name = "personalId")
private String personalId;
@Size(max = 40)
@Column(name = "city")
private String city;
@Size(max = 40)
@Column(name = "address")
private String address;
@NotNull
@Email
@Size(max = 30)
@Column(name = "email")
private String email;
@Size(min = 9, max = 9)
@Column(name = "phone")
private String phone;
@OneToMany(mappedBy = "user")
private Set<UserRole> userRoleSet;
}
Run Code Online (Sandbox Code Playgroud)
adminList.jsp 和表单转到 addAdmin 页面:
<form action="addAdminForm" method="post">
<input type="submit" value="Dodaj administratora" />
</form>
Run Code Online (Sandbox Code Playgroud)
addAdmin.jsp 页面公式:
<form:form action="addAdmin" modelAttribute="user" method="post">
<form:label path="username">Login: </form:label>
<form:input path="username" />
<form:errors path="username" cssClass="error" />
<br />
<form:label path="password">Has?o: </form:label>
<form:password path="password" />
<form:errors path="password" cssClass="error" />
<br />
<form:label path="firstName">Imi?: </form:label>
<form:input path="firstName" />
<form:errors path="firstName" cssClass="error" />
<br />
<form:label path="lastName">Nazwisko: </form:label>
<form:input path="lastName" />
<form:errors path="lastName" cssClass="error" />
<br />
<form:label path="email">Email: </form:label>
<form:input path="email" />
<form:errors path="email" cssClass="error" />
<br />
<input type="submit" value="Dodaj" />
</form:form>
Run Code Online (Sandbox Code Playgroud)
控制器:
@RequestMapping(value = "/admin/addAdminForm", method = RequestMethod.POST)
public ModelAndView goAddAdminForm() {
ModelAndView mav = new ModelAndView("admin/addadmin");
mav.addObject("user", new User());
return mav;
}
@RequestMapping(value = "/admin/addAdmin", method = RequestMethod.POST)
public String addAdmin(@Valid @ModelAttribute("user") User user,
BindingResult result, Model model) {
if (result.hasErrors()) {
return "admin/addadmin";
} else {
userService.createUser(user);
user = userService.findByUsername(user.getUsername());
UserRole userRole = new UserRole("ROLE_ADMIN");
userRole.setUser(user);
userRoleService.createUserRole(userRole);
return "redirect:/admin/adminlist";
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试发送空公式时,我应该收到错误消息result.hasErrors()而不是返回错误,我的应用程序转到其他地方并尝试保存用户。为什么@Valid 不起作用?
小智 9
我在 Spring Boot 2.4.1 项目中遇到了同样的问题。您需要在 pom.xml 文件中添加此依赖项
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
...
Run Code Online (Sandbox Code Playgroud)
您确定验证不起作用吗?除非您已StringTrimmerEditor注册,否则您的字段实际上将是长度等于 0 的 String 实例,而不是null您提交表单时的值,因此注释会认为这些值是有效的。
如果要验证 String 不为空(不是 null 也不是空字符串),请使用例如@NotBlank注释。此外,我自己@Email也尝试过,注释也通过空字符串,这意味着您的空表单现在实际上是有效的。
我在Kotlin中遇到了同样的问题,旧的 beans 自动从 Java 转换。他们缺少field目标说明符,没有它javax.validation注释就没有效果。
问题代码中的 Kotlin 片段(用于field解决问题):
@field:NotNull
@field:Size(max = 20)
@Column(name = "username")
var username: String
Run Code Online (Sandbox Code Playgroud)
我对 2.5.0 (SNAPSHOT) spring boot 项目也有同样的问题。我在 pom.xml 文件中添加了以下依赖项并且它起作用了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24040 次 |
| 最近记录: |