3. CRUD 기능

3-6. 사용자 정의ModelState 유효성 검사

이 섹션에서는 API에서 사용자 정의 유효성 검사를 구현하고, 유효하지 않은 경우 ModelState에 오류 메시지를 추가하는 방법을 다룹니다.

  1. 사용자 정의 유효성 검사의 필요성:
    • 기본 데이터 어노테이션으로 처리할 수 없는 복잡한 유효성 검사가 필요한 경우, 예를 들어 Plant 이름의 고유성을 검사하는 경우, 사용자 정의 유효성 검사 로직을 구현해야 합니다.
  2. 사용자 정의 유효성 검사 구현:
    • PlantAPIControllerCreatePlant 메서드 내에서, PlantStorePlantList를 검색하여 입력된 Plant 이름이 이미 존재하는지 확인합니다.이름이 이미 존재한다면, ModelState에 사용자 정의 오류 메시지를 추가합니다.
  3. ModelState에 오류 추가:
    • ModelState.AddModelError 메서드를 사용하여 사용자 정의 오류 메시지를 ModelState에 추가합니다. 이 메서드는 오류의 키(필드 이름)와 오류 메시지를 매개변수로 받습니다.키를 비워두면, 오류는 모델의 특정 필드에 연결되지 않고 전체 모델에 대한 오류로 처리됩니다.
  4. 테스트 및 검증:
    • Swagger UI를 통해 CreatePlant 엔드포인트를 테스트하고, 이미 존재하는 이름으로 Plant를 생성하려고 시도할 때 400 Bad Request와 사용자 정의 오류 메시지가 반환되는 것을 확인할 수 있습니다.
  5. 테스트 및 검증:
    • Swagger UI를 통해 CreatePlant 엔드포인트를 테스트하고, 이미 존재하는 이름으로 Plant를 생성하려고 시도할 때 400 Bad Request와 사용자 정의 오류 메시지가 반환되는 것을 확인할 수 있습니다.
  6. 실습 예시:
    • 위 코드는 입력된 Plant 이름이 이미 존재하는 경우, ModelState에 오류 메시지를 추가하고 BadRequest를 반환하는 방법을 보여줍니다.
if (PlantStore.PlantList.FirstOrDefault(u => u.Name.ToLower() == plantDTO.Name.ToLower()) != null)
{
    ModelState.AddModelError("CustomError", "같은 이름의 식물이 이미 존재합니다!");
    return BadRequest(ModelState);
}
AddModelError 오류 메시지 추가

이 방법을 통해 개발자는 API에서 복잡한 비즈니스 로직에 따른 유효성 검사를 구현하고,

유효하지 않은 입력에 대해 상세한 피드백을 클라이언트에 제공할 수 있습니다.

사용자 정의 유효성 검사는 API의 견고성을 높이고 사용자 경험을 개선하는 데 중요한 역할을 합니다.

프로젝트 리소스

https://github.com/kimdaewoong2022/MorePlants_WebAPI/tree/b54da3360670fc51205d2ba9691af5ef9163f265