2016-09-20 2 views
0

스프링 부트 1.4 및 스프링 데이터 Rest/MVC 사용 @Valid @RequestBody가 작동하지 않습니다. 나는 여러 버전의 Hibernate Validator를 시험해 보았고, Validtor beans 등을 선언했다.봄 최대 절전 모드 유효성 검사 @RequestBody

@BasePathAwareController 
@RestController 
public class TestRestController extends BaseController { 
    @PostMapping("/pojo/save") 
    public @ResponseBody ResponseEntity<?> upload(@Valid @RequestBody MyPojo pojo) { 
    // Code here calling a repository.save. 
} 

는 MyPojo는 repostiory.save 메소드를 호출하지만, 봄은 POJO에 어떤 검증을 시도하지 않을 때 나는 실제로 검증 예외를 참조 즉 @Digits, @NotNull 등 다양한 검증 주석이 포함되어 있습니다. 모든 아이디어를 주시면 감사하겠습니다

 <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-jdbc</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-mail</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-thymeleaf</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

: 여기

봄 종속성을 포함하여 내 POM의 섹션입니다. 나는 엄청난 양의 검색을 해봤고 행운없이 다양한 구성을 시도했다. 유효성 검사 오류가 발생할 때

업데이트

데이터베이스에 개체를 저장하려고, 그건.

Caused by: javax.persistence.RollbackException: Error while committing the transaction 
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes 
List of constraint violations:[ 
    ConstraintViolationImpl{interpolatedMessage='numeric value out of bounds (<9 digits>.<3 digits> expected)... 
+0

프론트 엔드에서 스프링 폼을 사용하는 경우'@ RequestAttribute'로 변경하십시오 ... 가능한 경우 프런트 엔드 코드 표시 (이 요청을 어떻게 호출하는지) –

+0

그것은 REST 엔드 포인트이므로 그냥 Postman Client를 사용하여 본문에서 JSON 객체로 POST를 수행합니다. – tlavarea

+0

[this] (http://blog.codeleak.pl/2013/09/request-body-validation-in-spring-mvc-3.2.html) 및 [이 링크] (https://dzone.com/articles)/spring-31-valid-requestbody) 도움이 될 수도 있습니다. –

답변

0

바로 후 확인 POJO BindingResult 매개 변수를 선언해야 @Valid 주석을 사용 : 나는 다음과 같은 오류가 발생합니다. BindingResult는 모든 유효성 검사 오류를 포함하므로 원하는 모든 작업을 자유롭게 수행 할 수 있습니다.

+1

더 많은 컨텍스트 : [시작하기 - 양식 입력 유효성 확인] (https://spring.io/guides/gs/validating-form-input/). 시작하기에서는 폼 유효성 검사에 대해 이야기하지만 JSON 요청을 기반으로 사용자 정의 응답을 수행 할 수도 있습니다. –

+0

답변 해 주셔서 감사합니다. 나는 행운도없이 그것을 시도했다. BindingResult에는 항상 오류가 없습니다. 또한 @ContainerAdvice 클래스를 만들어서 전역 적으로 MethodArgumentNotValidException 및 ConstraintViolationException을 처리하려고 시도했지만 그 중 하나도 작동하지 않았습니다. – tlavarea

+0

@RequestBody 주석을 매개 변수에서 제거하고 클래스 경로에 javax.validation을 구현했는지 확인하십시오 (예 : 최대 절전 유효성 검사기. 그리고 BindingResult를 어디에 두었습니까? 다음과 같이 유효성이 검사 된 바로 다음에 올 것입니다. '@Valid MyPojo pojo, BindingResult errors, @Valid MyAnotherPojo anotherPojo, BindingResult anotherErrors)' –

0

그래서 @BasePathAwareController가 바인딩 유효성 검사가 실행되지 않는 원인입니다. 이것이 의도 된 동작인지 또는 버그인지 확실하지 않지만 컨트롤러에서 해당 주석을 제거하면 유효성 검사가 예상대로 실행됩니다.

관련 문제