이 섹션에서는 API에서 사용자 정의 유효성 검사를 구현하고, 유효하지 않은 경우 ModelState
에 오류 메시지를 추가하는 방법을 다룹니다.
- 사용자 정의 유효성 검사의 필요성:
- 기본 데이터 어노테이션으로 처리할 수 없는 복잡한 유효성 검사가 필요한 경우, 예를 들어 Plant 이름의 고유성을 검사하는 경우, 사용자 정의 유효성 검사 로직을 구현해야 합니다.
- 사용자 정의 유효성 검사 구현:
PlantAPIController
의CreatePlant
메서드 내에서,PlantStore
의PlantList
를 검색하여 입력된 Plant 이름이 이미 존재하는지 확인합니다.이름이 이미 존재한다면,ModelState
에 사용자 정의 오류 메시지를 추가합니다.
- ModelState에 오류 추가:
ModelState.AddModelError
메서드를 사용하여 사용자 정의 오류 메시지를ModelState
에 추가합니다. 이 메서드는 오류의 키(필드 이름)와 오류 메시지를 매개변수로 받습니다.키를 비워두면, 오류는 모델의 특정 필드에 연결되지 않고 전체 모델에 대한 오류로 처리됩니다.
- 테스트 및 검증:
- Swagger UI를 통해
CreatePlant
엔드포인트를 테스트하고, 이미 존재하는 이름으로 Plant를 생성하려고 시도할 때400 Bad Request
와 사용자 정의 오류 메시지가 반환되는 것을 확인할 수 있습니다.
- Swagger UI를 통해
- 테스트 및 검증:
- Swagger UI를 통해
CreatePlant
엔드포인트를 테스트하고, 이미 존재하는 이름으로 Plant를 생성하려고 시도할 때400 Bad Request
와 사용자 정의 오류 메시지가 반환되는 것을 확인할 수 있습니다.
- Swagger UI를 통해
- 실습 예시:
- 위 코드는 입력된 Plant 이름이 이미 존재하는 경우,
ModelState
에 오류 메시지를 추가하고BadRequest
를 반환하는 방법을 보여줍니다.
- 위 코드는 입력된 Plant 이름이 이미 존재하는 경우,
if (PlantStore.PlantList.FirstOrDefault(u => u.Name.ToLower() == plantDTO.Name.ToLower()) != null)
{
ModelState.AddModelError("CustomError", "같은 이름의 식물이 이미 존재합니다!");
return BadRequest(ModelState);
}
이 방법을 통해 개발자는 API에서 복잡한 비즈니스 로직에 따른 유효성 검사를 구현하고,
유효하지 않은 입력에 대해 상세한 피드백을 클라이언트에 제공할 수 있습니다.
사용자 정의 유효성 검사는 API의 견고성을 높이고 사용자 경험을 개선하는 데 중요한 역할을 합니다.
프로젝트 리소스
https://github.com/kimdaewoong2022/MorePlants_WebAPI/tree/b54da3360670fc51205d2ba9691af5ef9163f265