봄의 @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
을 사용법 가지다@Valid
의 AppointmentForm
(이 경우)@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입니다.@Valid
JSR303으로 지정됩니다.
아시다시피 Spring은 JSR 및 Java 라이브러리(JPA, JTA, 캐싱 등)와의 통합에 매우 능숙하며, 물론 검증도 담당했습니다.이를 용이하게 하는 주요 컴포넌트 중 하나가 Method Validation Post Processor입니다.
노력하고 .@Valid
는 오브젝트의 최상위 요소뿐만 아니라 복잡한 그래프를 검증하는 이른바 검증 캐스케이드에 매우 편리합니다. 깊이 는 항상 '더 깊이'를 사용해야 .@Valid
JSR에 대해서입니다.스프링은 약간의 작은 편차를 가지고 그것을 준수할 것이다(예를 들어, 나는 퍼팅을 시도했다).@Validated
@Valid
RestController 메서드와 검증은 동작하지만 일반 "서비스" 빈에는 적용되지 않습니다.
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
'programing' 카테고리의 다른 글
mariadb 서버:mysql.server stop'을 사용하여 서버를 중지할 수 없습니다. (0) | 2023.02.04 |
---|---|
Python의 stdlib를 사용하여 로컬 IP 주소 찾기 (0) | 2023.02.04 |
null 값에 대해 jdk8 스트림을 관리하는 방법 (0) | 2023.02.04 |
Linux에서 문자열 리터럴의 메모리 주소가 다른 것과 다른 이유는 무엇입니까? (0) | 2023.01.25 |
Spark 경유로 Mariadb에 Apache Superset 연결 (0) | 2023.01.25 |