development

@Valid 주석은 Spring에서 무엇을 의미합니까?

big-blog 2020. 11. 8. 10:29
반응형

@Valid 주석은 Spring에서 무엇을 의미합니까?


다음 예에서 ScriptFile매개 변수는 @Valid주석으로 표시됩니다 .

@Valid주석의 기능은 무엇입니까 ?

@RequestMapping(value = "/scriptfile", method = RequestMethod.POST)    
public String create(@Valid ScriptFile scriptFile, BindingResult result, ModelMap modelMap) {    
    if (scriptFile == null) throw new IllegalArgumentException("A scriptFile is required");        
    if (result.hasErrors()) {        
        modelMap.addAttribute("scriptFile", scriptFile);            
        modelMap.addAttribute("showcases", ShowCase.findAllShowCases());            
        return "scriptfile/create";            
    }        
    scriptFile.persist();        
    return "redirect:/scriptfile/" + scriptFile.getId();        
}    

유효성 검사 목적입니다.

유효성 검사 사용자 입력을 바인딩 한 후 모델의 유효성을 검사하는 것이 일반적입니다. Spring 3는 JSR-303으로 선언적 유효성 검사를 지원합니다. 이 지원은 Hibernate Validator와 같은 JSR-303 공급자가 클래스 경로에있는 경우 자동으로 활성화됩니다. 활성화되면 @Valid 어노테이션으로 Controller 메소드 매개 변수에 주석을 달아 간단히 유효성 검증을 트리거 할 수 있습니다. 수신 POST 매개 변수를 바인딩 한 후 AppointmentForm이 유효성 검증됩니다. 이 경우 날짜 필드 값이 null이 아니고 향후 발생하는지 확인합니다.


자세한 정보는 여기를 참조하십시오 :
http://blog.springsource.com/2009/11/17/spring-3-type-conversion-and-validation/


위의 답변에 추가하여 다음을 살펴보십시오. AppointmentFormdate열에는 몇 가지 주석이 추가되었습니다. @Valid에 대한 유효성 검사를 트리거 하는 주석이 있습니다 AppointmentForm(이 경우 @NotNull@Future). 이러한 주석은 다른 JSR-303 공급자 (예 : Hibernate, Spring..etc)에서 올 수 있습니다.

    @RequestMapping(value = "/appointments", method = RequestMethod.POST)
    public String add(@Valid AppointmentForm form, BindingResult result) {
        ....
    }

    static class AppointmentForm {

        @NotNull @Future
        private Date date;
    }

IIRC @Valid는 Spring 주석이 아니라 JSR-303 주석 (Bean Validation 표준)입니다. 기본적으로 메서드에 보내는 데이터가 유효한지 여부를 확인합니다 (스크립트 파일의 유효성을 검사합니다).


@Valid그 자체로는 Spring과 관련이 없습니다. Bean Validation 사양의 일부 (여러 개가 있으며 2017 년 하반기 현재 최신 버전은 JSR 380 임)이지만 @Valid매우 오래되었으며 JSR 303에서 파생되었습니다.

우리 모두 알다시피, Spring은 일반적으로 모든 다른 JSR 및 자바 라이브러리 (JPA, JTA, 캐싱 등)와의 통합을 제공하는 데 매우 능숙하며 물론 그 사람들도 유효성 검사를 처리했습니다. 이를 용이하게하는 핵심 구성 요소 중 하나는 MethodValidationPostProcessor 입니다.

질문에 대답하려고 시도하는 @Valid것은 객체의 최상위 요소가 아닌 복잡한 그래프를 검증하려는 경우 소위 검증 계단식으로 매우 편리합니다. 더 깊이 들어가고 싶을 때마다 @Valid. 그것이 JSR이 지시하는 것입니다. Spring은 약간의 약간의 편차 (예를 들어 나는 RestController 메서드와 유효성 검사가 작동 하는 @Validated대신에 넣어 @Valid보았지만 일반 "서비스"bean에는 동일하게 적용되지 않음)를 준수합니다.


public String create(@Valid @NotNull ScriptFile scriptFile, BindingResult result, ModelMap modelMap) {    
    if (scriptFile == null) throw new IllegalArgumentException("A scriptFile is required");        

@NotNull따라서 조건이 필요하지 않은 경우이 주석이 유효하다고 생각 합니다.


그냥 웹 응용 프로그램에서 위의 대답에 추가 @valid사용되는 경우도 주석을 붙일 수 있고 검증 할 수있는 빈 검증 주석 예를 들어 @NotNull, @Email(최대 절전 모드 주석) 결과 값의 유효성을 검사 할 수 있습니다 사용자로부터 입력을 받고 바인딩 유효성 검사를해야합니다 동안 그래서 결과. bindingResult.hasErrors()유효성 검사가 실패했는지 알려줍니다.


위에 언급되지 않은 @Valid의 또 다른 편리한 측면은 (예 : Postman을 사용하여 엔드 포인트 테스트) @Valid가 잘못된 REST 호출의 출력을 거의 읽을 수없는 텍스트의 얼룩 대신 형식화 된 JSON으로 형식화한다는 것입니다. 이는 사용자를 위해 상업적으로 소비 가능한 API를 만드는 경우 매우 유용합니다.

참고 URL : https://stackoverflow.com/questions/3595160/what-does-the-valid-annotation-indicate-in-spring

반응형