반응형
@Valid
- 바인딩을 한 뒤 값에 대한 검증을 하기위해서는 @Valid 또는 @Validated를 사용하면 된다.
// Handler
@PostMapping("/events")
@ResponseBody
public Event getEvent(@Valid @ModelAttribute Event event, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
System.out.println("=====================");
bindingResult.getAllErrors().forEach(c -> {
System.out.println(c.toString());
});
}
return event;
}
// Event Class
public class Event {
private Integer id;
private String name;
@Min(0) // 0보다 작은 값은 허용하지 않는다.
private Integer limit;
... (이하 생략)
}
// Test Code
@Test
public void postEvent() throws Exception {
mockMvc.perform(post("/events?name=hooong")
.param("limit","-10"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("name").value("hooong"));
} // => test는 성공. bindingResult를 통해 validation에러가 출력되는 것을 확인할 수 있다.
@Validated
- @Valid를 사용하면 그룹을 지정할 수 없지만 @Validated를 사용하면 그룹을 지정할 수 있다.
// Event Class
public class Event {
// 그룹을 사용하기 위한 interface를 생성.
interface ValidateLimit {}
interface ValidateName {}
private Integer id;
// @NotBlank에는 ValidateName이라는 그룹을 지정
@NotBlank(groups = ValidateName.class)
private String name;
// @Min에는 ValidateLimit이라는 그룹을 지정
@Min(value = 0, groups = ValidateLimit.class)
private Integer limit;
... (이하 생략)
}
// Handler
@PostMapping("/events")
@ResponseBody
// ValidateName라는 그룹을 지정해서 @NotBlank만 검증을 한다.
public Event getEvent(@Validated(Event.ValidateName.class) @ModelAttribute Event event, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
System.out.println("=====================");
bindingResult.getAllErrors().forEach(c -> {
System.out.println(c.toString());
});
}
return event;
}
// 또는 ValidateLimit을 지정하여 @Min(0)만을 검증.
public Event getEvent(@Validated(Event.ValidateLimit.class) @ModelAttribute Event event, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
System.out.println("=====================");
bindingResult.getAllErrors().forEach(c -> {
System.out.println(c.toString());
});
}
return event;
}
반응형
'Web > Spring' 카테고리의 다른 글
[Spring MVC] @SessionAttributes 사용하기 (0) | 2020.01.21 |
---|---|
[Spring MVC] Form을 통한 submit 할 때 에러를 띄워주기 (0) | 2020.01.16 |
[Spring MVC] @ModelAttribute 사용하기 (0) | 2020.01.16 |
Thymeleaf 간단 사용법 (Form을 만들어보기) (0) | 2020.01.10 |
[Spring MVC] HandlerMethod - @RequestMapping (0) | 2020.01.10 |