이전글에서 @RequestBody가 하나의 객체일때 유효성 검사하는 것을 공부하였다.
하지만 API @RequestBody가 List일때 유효성 검사가 제대로 되지 않는 상황이 발생하였다.
@Valid @RequestBody List<Order> orders
@Component
@RequiredArgsConstructor
public class CustomValidator implements Validator {
// 검증위해 SpringValidatorAdapter 주입
private final SpringValidatorAdapter validator;
// 검증 대상이 List 인지 확인
@Override
public boolean supports(Class<?> clazz) {
return List.class.equals(clazz);
}
// target을 Collection으로 캐스팅한 뒤 담겨있는 객체를 순회하며, validator를 이용해 검증
@Override
public void validate(Object target, Errors errors) {
for (Object object : (Collection)target) {
validator.validate(object,errors);
}
}
}
public ResponseEntity<CommonResponse<Object>> updateFaqCategoryOrder(
@RequestBody List<Order> orders, Errors errors) {
customValidator.validate(orders,errors);
if (!errors.hasErrors()) {
orderService.updateOrder(orders);
} else {
throw new BusinessException(ResponseCode.VALIDATION_ERROR);
}
return ResponseEntity.ok().body(new CommonResponse<>(ResponseCode.SUCCESS_UPDATE));
}
참고
https://gompangs.tistory.com/entry/Spring-Valid-Collection-Validation-관련