<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Spring REST 請求主體和參數驗證示例 > [https://howtodoinjava.com/spring-restful/request-body-parameter-validation/](https://howtodoinjava.com/spring-restful/request-body-parameter-validation/) 學習**驗證請求正文**(發布到 Spring REST API 的 JSON)。 還使用 [Hibernate 驗證器 2.x](https://beanvalidation.org/2.0/) 驗證資源 URI 中的`@PathVariable`和`@RequestParam`參數。 在此 **SpringRest 驗證示例**中,我們將在為 [CRUD 示例](https://howtodoinjava.com/spring-restful/spring-rest-crud-jpa-example/)創建的 [REST API](http://restfulapi.net/) 中添加驗證。 ## 1\. 使用 Hibernate 驗證器的請求正文驗證 #### 1.1. Maven 依賴 `pom.xml` ```java <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.16.Final</version> </dependency> ``` 這可傳遞地將對 Bean 驗證 API 的依賴關系拉到`javax.validation:validation-api: 2.0.1.Final`。 #### 1.2. 啟用 bean 驗證 在 [SpringBoot](https://howtodoinjava.com/spring-boot-tutorials/) 中,如果類路徑上有任何 **JSR-303** 實現(例如[Hibernate 驗證器 2.0](https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/) ),則將自動啟用 Bean 驗證。 如果不使用 Spring Boot,則需要添加[`LocalValidatorFactoryBean`](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.html)。 `Java 配置` ```java @Bean public javax.validation.Validator localValidatorFactoryBean() { return new LocalValidatorFactoryBean(); } ``` `XML 配置` ```java <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> ``` #### 1.3. 添加 bean 驗證注解 在模型類中添加 Bean 驗證注解,該注解將存儲請求正文數據,例如`@NotEmpty`和`@Email`。 `Java 配置` ```java import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; @Entity @Table(name = "tbl_employee") public class Employee implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotEmpty(message = "First name must not be empty") private String firstName; @NotEmpty(message = "Last name must not be empty") private String lastName; @NotEmpty(message = "Email must not be empty") @Email(message = "Email must be a valid email address") private String email; public Employee() { } //setters and getters @Override public String toString() { return "EmployeeVO [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]"; } } ``` #### 1.4. 處理`ConstraintViolationException` 如果發生任何驗證失敗,Spring 將拋出[`ConstraintViolationException`](https://javaee.github.io/javaee-spec/javadocs/javax/validation/ConstraintViolationException.html)。 我們可以使用[`@ExceptionHandler`](https://howtodoinjava.com/spring-core/spring-exceptionhandler-annotation/)處理任何返回有意義的 JSON 錯誤響應的事件。 `CustomExceptionHandler.java` ```java @ControllerAdvice @ResponseBody public class CustomExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(ConstraintViolationException.class) public final ResponseEntity<ErrorResponse> handleConstraintViolation( ConstraintViolationException ex, WebRequest request) { List<String> details = ex.getConstraintViolations() .parallelStream() .map(e -> e.getMessage()) .collect(Collectors.toList()); ErrorResponse error = new ErrorResponse(BAD_REQUEST, details); return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); } } ``` ## 2\. 查詢和路徑參數驗證 在 Spring REST 中,通過`@PathVariable`捕獲請求 URI 中的參數,并通過`@RequestParam`捕獲所有查詢參數。 請注意,必須添加 maven 依賴項,并且應按上述說明處理`ConstraintViolationException`。 #### 2.1. 啟用驗證 查詢和路徑參數驗證并不簡單。 我們需要顯式創建 bean `MethodValidationPostProcessor`,它將處理`@Validated`注解。 `XML 配置` ```java <bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/> ``` `Java 配置` ```java @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); } ``` #### 2.2. 向參數添加驗證 * 使用如上所述的 JSR-303 注解。 * 在控制器頂部使用`@Validated`注解,因此適用于其中的所有方法。 ```java @RestController @RequestMapping(value = "/employee-management", produces = { MediaType.APPLICATION_JSON_VALUE }) @Validated public class EmployeeRESTController { @GetMapping("/employees/{id}") Employee getEmployeeById(@PathVariable @Min(value = 1, message = "id must be greater than or equal to 1") @Max(value = 1000, message = "id must be lower than or equal to 1000") Long id) { return repository.findById(id) .orElseThrow(() -> new RecordNotFoundException("Employee id '" + id + "' does no exist")); } } ``` ## 3\. 演示 #### 3.1. 請求正文驗證 `API 請求 1` ```java HTTP POST : http://localhost:8080/SpringRestExample/api/rest/employee-management/employees/ Headers: AUTH_API_KEY: abcd123456 Content-Type: application/json Body: { "firstName": "", "lastName": "Gupta", "email": "abc@gmail.com" } ``` `API 響應 1` ```java { "message":"BAD_REQUEST", "details":["First name must not be empty"] } ``` `API 請求 2` ```java HTTP POST : http://localhost:8080/SpringRestExample/api/rest/employee-management/employees/ Headers: AUTH_API_KEY: abcd123456 Content-Type: application/json Body: { "firstName": "", "email": "abc@gmail.com" } ``` `API 響應 2` ```java { "message":"BAD_REQUEST", "details": [ "First name must not be empty", "Last name must not be empty" ] } ``` #### 3.2. 路徑參數驗證 `API 請求 1` ```java HTTP GET : http://localhost:8080/SpringRestExample/api/rest/employee-management/employees/0 Headers: AUTH_API_KEY: abcd123456 Content-Type: application/json ``` `API 響應 1` ```java { "message":"BAD_REQUEST", "details":["id must be greater than or equal to 1"] } ``` `API 請求 2` ```java HTTP GET : http://localhost:8080/SpringRestExample/api/rest/employee-management/employees/5000 Headers: AUTH_API_KEY: abcd123456 Content-Type: application/json ``` `API 請求 2` ```java { “message”:”BAD_REQUEST”, “details”:[“id must be lower than or equal to 1000”] } ``` [下載源碼](https://howtodoinjava.com/wp-content/downloads/SpringRestExample.zip) 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看