programing

봄의 @Valid 주석은 무엇을 의미합니까?

yoursource 2023. 2. 4. 09:37
반응형

봄의 @Valid 주석은 무엇을 의미합니까?

예제에서는 음음 in in in in in in 。ScriptFile에는 '하다'가 있습니다.@Valid석입니니다다

무인 does does 가 뭐죠?@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();        
}    

검증용입니다.

검증 사용자 입력을 모델에 바인딩한 후 모델을 검증하는 것이 일반적입니다.스프링 3에서는 JSR-303에 의한 선언적 검증이 지원됩니다.클래스 패스에 휴지 상태 검증기 등의 JSR-303 프로바이더가 있는 경우, 이 서포트는 자동적으로 유효하게 됩니다.활성화 시 컨트롤러 메서드 파라미터에 @Valid 주석: 착신 POST 파라미터를 바인드한 후 Assignment Form이 검증됩니다.이 경우 날짜 필드 값이 null이 아니라 나중에 발생하는지 확인합니다.


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
http://blog.springsource.com/2009/11/17/spring-3-type-conversion-and-validation/httpblog.springsource.com/2009/11/17//

위의 답변에 덧붙여, 다음의 내용을 봐 주세요. AppointmentForm의 »date을 사용법 가지다@ValidAppointmentForm (이 경우)@NotNull ★★★★★★★★★★★★★★★★★」@Future이러한 주석은, 다른 JSR-303 프로바이더(예를 들면, 휴지 상태, 스프링 등)로부터 취득할 수 있습니다.

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

    static class AppointmentForm {

        @NotNull @Future
        private Date date;
    }

@Valid이것 Validation 사양의 일부입니다만, Bean Validation은 2017년 하반기 현재 JSR 380입니다.@ValidJSR303으로 지정됩니다.

아시다시피 Spring은 JSR 및 Java 라이브러리(JPA, JTA, 캐싱 등)와의 통합에 매우 능숙하며, 물론 검증도 담당했습니다.이를 용이하게 하는 주요 컴포넌트 중 하나가 Method Validation Post Processor입니다.

노력하고 .@Valid는 오브젝트의 최상위 요소뿐만 아니라 복잡한 그래프를 검증하는 이른바 검증 캐스케이드에 매우 편리합니다. 깊이 는 항상 '더 깊이'를 사용해야 .@ValidJSR에 대해서입니다.스프링은 약간의 작은 편차를 가지고 그것을 준수할 것이다(예를 들어, 나는 퍼팅을 시도했다).@Validated@ValidRestController 메서드와 검증은 동작하지만 일반 "서비스" 빈에는 적용되지 않습니다.

IIRC @Valid는 스프링 주석이 아니라 JSR-303 주석(Bean Validation 표준)입니다.기본적으로 메서드에 보낸 데이터가 유효한지 여부를 확인합니다(scriptFile을 대신 검증합니다).

좋은지 더 .@Valid특히 봄에 효과가 있습니다.

봄철 검증에 대해 알고 싶은 모든 내용은 https://reflectoring.io/bean-validation-with-spring-boot/,에 자세히 설명되어 있습니다.다만, 다음의 방법에 대한 답을 카피합니다.@Valid링크가 다운되었을 경우에 동작합니다.

@Valid주석을 나머지 컨트롤러 방법의 변수에 추가하여 변수를 검증할 수 있습니다.검증할 수 있는 변수에는 다음 3가지 유형이 있습니다.

  • 요청 기관,
  • 경로 내 변수(예: /foos/{id}의 id) 및
  • 쿼리 파라미터

그래서 지금...봄은 어떻게 "거울"까요?클래스 필드에 특정 주석을 추가하여 해당 필드에 대한 구속조건을 정의할 수 있습니다.그런 다음 해당 클래스의 개체를 Validator로 전달하면 제약 조건이 충족되는지 여부를 확인할 수 있습니다.

예를 들어 다음과 같은 컨트롤러 방식을 사용한다고 가정합니다.

@RestController
class ValidateRequestBodyController {

  @PostMapping("/validateBody")
  ResponseEntity<String> validateBody(@Valid @RequestBody Input input) {
    return ResponseEntity.ok("valid");
  }

}

본문을 본문을 「POST」, 「POST」에 매핑합니다.Input.

그럼 다음 수업은 here here기업업수수수 here here here here here here here here?Input:

class Input {

  @Min(1)
  @Max(10)
  private int numberBetweenOneAndTen;

  @Pattern(regexp = "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$")
  private String ipAddress;
  
  // ...
}

@ @Valid가 합니다.정수가numberBetweenOneAndTen최소 주석과 최대 주석으로 인해 1에서 10 사이입니다.또한 전달된 IP 주소가 주석의 정규 표현과 일치하는지 확인합니다.

사이드 노트: 정규 표현은 완벽하지 않습니다.255보다 큰 3자리 숫자를 입력할 수 있지만 정규 표현과 일치합니다.


다음은 쿼리 변수와 경로 변수를 검증하는 예입니다.

@RestController
@Validated
class ValidateParametersController {

  @GetMapping("/validatePathVariable/{id}")
  ResponseEntity<String> validatePathVariable(
      @PathVariable("id") @Min(5) int id) {
    return ResponseEntity.ok("valid");
  }
  
  @GetMapping("/validateRequestParameter")
  ResponseEntity<String> validateRequestParameter(
      @RequestParam("param") @Min(5) int param) { 
    return ResponseEntity.ok("valid");
  }
}

및 클래스가 합니다.@Min(5)를 사용하는 합니다.@Valid.

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

인가 봐요@NotNull주석은 조건이 필요하지 않은 경우 유효합니다.

당신의 질문이 어디로 향하는지 알 것 같아요.그리고 이 질문은 구글의 주요 검색 결과에서 나타나는 것이므로, 저는 @Valid 주석의 기능에 대해 쉽게 대답할 수 있습니다.

@Valid를 사용한 3가지 시나리오를 제시하겠습니다.

모델:

public class Employee{
private String name;
@NotNull(message="cannot be null")
@Size(min=1, message="cannot be blank")
private String lastName;
 //Getters and Setters for both fields.
 //...
}

JSP:

...
<form:form action="processForm" modelAttribute="employee">
 <form:input type="text" path="name"/>
 <br>
 <form:input type="text" path="lastName"/>
<form:errors path="lastName"/>
<input type="submit" value="Submit"/>
</form:form>
...

시나리오 1의 컨트롤러:

     @RequestMapping("processForm")
        public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
        return "employee-confirmation-page";
    }

이 시나리오에서는 빈 성 필드와 함께 양식을 제출한 후 검증 규칙을 적용 중이지만 전혀 처리하지 않고 있기 때문에 오류 페이지가 나타납니다.

해당 오류의 예: 예외 페이지

시나리오 2의 컨트롤러:

 @RequestMapping("processForm")
    public String processFormData(@Valid @ModelAttribute("employee") Employee employee,
BindingResult bindingResult){
                return bindingResult.hasErrors() ? "employee-form" : "employee-confirmation-page";
            }

이 시나리오에서는 검증의 모든 결과를 bindingResult로 전달하므로 해당 폼의 검증 결과를 어떻게 처리할지는 사용자에게 달려 있습니다.

시나리오 3의 컨트롤러:

@RequestMapping("processForm")
    public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
                return "employee-confirmation-page";
            }
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, String> invalidFormProcessor(MethodArgumentNotValidException ex){
  //Your mapping of the errors...etc
}

이 시나리오에서는 첫 번째 시나리오와 같은 오류를 처리하지 않지만 폼 모델을 처리할 때 @Valid가 트리거하는 예외를 처리하는 다른 메서드에 전달합니다. 체크박스를 켜면 매핑 및 기타 모든 작업을 수행할 수 있습니다.

요약: @Valid 자체에서 검증 JSR 303 주석 필드(@NotNull, @Email, @Size 등)의 검증을 트리거하는 것은 아무것도 하지 않고 검증 결과를 어떻게 처리할지에 대한 전략을 지정해야 합니다.

이걸로 비틀거릴만한 사람들을 위해 내가 뭔가를 할 수 있었으면 좋겠어.

답변에 , 「 a application 」를 참조해 주세요.@valid는 검증 : 검증 주석).@NotNull,@Email(주석 첨부) 따라서 사용자로부터 입력을 받는 동안 값을 검증할 수 있고 바인딩 결과가 검증 결과를 얻을 수 있습니다. bindingResult.hasErrors()는 검증에 실패했는지 여부를 알려줍니다.

@Valid not asked의 또 다른 편리한 측면은 (즉, Postman을 사용하여 엔드포인트를 테스트하는 경우)@Valid가 잘못된 REST 콜의 출력을 거의 읽을 수 없는 텍스트 덩어리가 아닌 포맷된 JSON으로 포맷한다는 것입니다.이는 상업적으로 소비되는 API를 사용자를 위해 작성하는 경우 매우 유용합니다.

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

반응형