REST API 만들기-7

스프링 기반 REST API 개발 -백기선님 인프런 강좌를 보고 작성하였습니다.

입력값이 이상한 경우 Bad Request 처리-2

EventValidator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Component
public class EventValidator {
public void validate(EventDto eventDto, Errors errors){
if(eventDto.getBasePrice()>eventDto.getMaxPrice()&& eventDto.getMaxPrice()>0){
errors.rejectValue("basePrice","wrongValue","BasePrice is wrong.");
errors.rejectValue("maxPrice","wrongValue","MaxPrice is wrong.");
errors.reject("wrongPrices","Values to prices are wrong");
}

LocalDateTime endEventDateTime =eventDto.getEndEventDateTime();
if(endEventDateTime.isBefore(eventDto.getBeginEventDateTime()) ||
endEventDateTime.isBefore(eventDto.getCloseEnrollmentDateTime())||
endEventDateTime.isBefore(eventDto.getBeginEnrollmentDateTime())){
errors.rejectValue("endEventDateTime","wrongValue","endEventDateTime is wrong.");
}
// TODO beginEventDateTime
// TODO CloseEnrollmentDateTime
}
}

EventValidator클래스를 만들어 준 후 검증 할 값들을 어떻게 검증할 것인지를 작성하고 검증에 실패 할경우 에러를 담아 줍니다.

EventController

작성한 validator는 빈으로 등록했기 때문에 사용하기 위해 컨트롤러에 생성자에 넣어 사용합니다.

1
2
3
4
5
6
private final EventValidator eventValidator;
public EventController(EventRepository eventRepository, ModelMapper modelMapper, EventValidator eventValidator){
this.eventRepository = eventRepository;
this.modelMapper = modelMapper;
this.eventValidator = eventValidator;
}

이렇게 컨트롤러에서 주입 받을 수 있습니다.

1
2
3
4
eventValidator.validate(eventDto,errors);
if(errors.hasErrors()){
return ResponseEntity.badRequest().build();
}

코드 추가하여 잘못된 값에 대한 검증을 할 수 있습니다.