在这个示例中,我们将演示如何在Spring Boot REST应用程序中使用Bean Validation。
简介
数据验证是许多应用程序的基本要求,尤其是对于以数据作为输入的Web应用程序。例如,您可能要确保请求中发送的电子邮件地址或信用卡 是有效的。
在引入Java Bean Validation API之前,JEE开发人员往往需要专门编写逻辑来对数据进行验证。对于开发人员而言,这是一项繁琐且耗时的任务。这也导致难以维护的笨拙的代码库,因为验证代码可能在应用程序的多个层中实现(例如,表示层,服务层和持久层)。Bean Validation规范正好可以解决这些问题。
示例
1.创建Spring Boot项目
在pom.xml中添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId></dependency>
2.验证JPA实体类
一种常见的做法是向类中添加约束。由于模型通常可供JEE应用程序的所有层访问,因此可以避免代码重复。让我们通过创建JPA实体类并向其字段添加约束来演示这一点。
User.java
import java.time.LocalDate;import java.util.List; import javax.persistence.ElementCollection;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.validation.constraints.Email;import javax.validation.constraints.NotEmpty;import javax.validation.constraints.Past;import javax.validation.constraints.Pattern; import com.fasterxml.jackson.annotation.JsonFormat; @Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @NotEmpty(message = "First name is required") private String firstName; @NotEmpty(message = "Last name is required") private String lastName; @NotEmpty(message = "Email is required") @Email private String email; @NotEmpty(message = "Phone number is required") @Pattern(regexp="^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$", message="Mobile number is invalid") private String mobilePhone; @Past @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate birthday; @NotEmpty(message = "Communication preference is required") private String commPreference; @ElementCollection private List<@NotEmpty String> mobileDevices; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMobilePhone() { return mobilePhone; } public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; } public LocalDate getBirthday() { return birthday; } public void setBirthday(LocalDate birthday) { this.birthday = birthday; } public String getCommPreference() { return commPreference; } public void setCommPreference(String commPreference) { this.commPreference = commPreference; } public List<String> getMobileDevices() { return mobileDevices; } public void setMobileDevices(List<String> mobileDevices) { this.mobileDevices = mobileDevices; } }
在User实体类中用到的注解如下:
3.创建User Repository
UserRepository.java
import org.springframework.data.repository.CrudRepository; import com.javacodegeeks.examples.entities.User; public interface UserRepository extends CrudRepository<User, Long> { }
4.创建REST Controller
UserController.java
import javax.validation.Valid; import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; import com.javacodegeeks.examples.entities.User;import com.javacodegeeks.examples.repository.UserRepository; @RestController@RequestMapping("users")public class UserController { private final UserRepository userRepository; public UserController(UserRepository userRepository) { this.userRepository = userRepository; } @PostMapping public ResponseEntity<String> addUser(@RequestBody @Valid User user) { userRepository.save(user); return ResponseEntity.ok("User data is valid"); }}
5.验证 Bean Validation
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!