2017-12-27 29 views
0

를 호출되지 않습니다 :방법은 내가 검증하기 위해 다음과 같은 클래스가

@Document(collection = "settings") 
public class Settings { 
    @NotEmpty 
    private String[] allowableExtensions; 
    ... 
    @AssertTrue(message = "Each extension must be alphanumeric string with length {2,4}") 
    public boolean assertTrue() { 
     for (String extension : allowableExtensions) { 
      if (extension == null || extension.matches("^[a-zA-Z0-9]{2,6}$")) { 
       return false; 
      } 
     } 
     return true; 
    } 
} 

및 다음 컨트롤러 :

@PostMapping(value = "/settings/update", consumes = "application/json") 
public ResponseEntity<?> updateSettings(@RequestBody @Valid Settings settings, BindingResult bindingResult) { 
    if(bindingResult.hasErrors()){ 
     return ResponseEntity.badRequest().body(bindingResult.getAllErrors().get(0).getDefaultMessage()); 
    } 
} 

내가 기대했던 오류를 발견하고 assertTrue 방법에 중단 점을 두지 않았지만, 그것은 호출하지 않습니다.

무엇이 잘못 되었나요?

답변

1

assertTrue 메서드는 JavaBean 규칙을 따르지 않으므로 메서드 유효성 검사를 수행하지 않으므로 호출되지 않으며 예상 한 위반이 발생하지 않습니다. 예를 들어 당신이

public class Settings { 

    @NotEmpty 
    private String[] allowableExtensions; 

    @AssertTrue(message = "Each extension must be alphanumeric string with length {2,4}") 
    public boolean isAssertTrue() { 
     for (String extension : allowableExtensions) { 
      if (extension == null || extension.matches("^[a-zA-Z0-9]{2,6}$")) { 
       return false; 
      } 
     } 
     return true; 
    } 
} 

처럼 뭔가에 Setting 클래스를 변경하는 경우 그래서 당신이라는 Settings#isAssertTrue 방법을 받아야하고 검증 결과입니다.