ParameterBinding
앞서 Dto로 전달한 Category의 viewName으로 가게리스트를 카테고리별로 조회하는 기능을 만들고자 했다.
/**
* 가게 리스트 종류별 조회
*/
@GetMapping("/category/{category}")
@Operation(summary = "카테고리별 가게 리스트 조회 요청", description = "카테고리별 가게 리스트 조회 요청 API 입니다.")
public ResponseEntity<List<GetStoreDto>> getStoresByType(
@PathVariable("category") Category category) {
List<GetStoreDto> getStoreDtos = storeService.getStoresByType(category);
return ResponseEntity.ok(getStoreDtos);
}
이렇게만 구성하니 당연하게도 Category의 Name으로 조회하는 방식이었다.
viewName으로 조회하기 위해서는 Converter을 커스텀해줘야 한다.
Category.ofView를 통해 value에 맞는 category값을 찾아준다.
public class StoreCategoryRequestConverter implements Converter<String, Category> {
@Override
public Category convert(String value) {
return Category.ofView(value);
}
}
만약 value값 조회가 아닌 Name 대소문자 구분을 없애고 싶다면 Category.valueOf(value.toUpperCase()) 로
convert 함수 내의 값을 바꿔주면 된다.
Converter을 모두 구현했으니 이제 이를 등록해줘야 한다.
WebMvcConfigurer 인터페이스의 addFormatters 메서드를 오버라이딩해서 등록한다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StoreCategoryRequestConverter());
}
}
Spring이 애플리케이션 시작 시에 해당 설정 정보를 읽게 하기 위해 @Configuration을 사용하면 된다.
Converter오류 시 발생하는 ConversionFailedException을 처리해 주기 위해 아래의 코드를 추가해 주었다.
@RestControllerAdvice
public class ExceptionAdvice {
...
@ExceptionHandler(ConversionFailedException.class)
public ResponseEntity<ErrorResponse> handleConvertException(Exception e) {
final ErrorResponse response = ErrorResponse.of(ErrorCode._BAD_REQUEST);
return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
}
...
}
https://techblog.woowahan.com/2527/
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com
https://www.baeldung.com/spring-enum-request-param
Using Enums as Request Parameters in Spring | Baeldung
Learn how to use enums as request parameters in Spring REST controllers and how to handle exceptions triggered by invalid input.
www.baeldung.com
'💻 프로젝트 > 🍝 홍잇' 카테고리의 다른 글
[HongEat] 리팩토링 - Enum/toJson(@JsonValue) (0) | 2023.04.22 |
---|---|
[HongEat] 리팩토링 - Enum/toEntity(@JsonCreator, @EnumValid) (0) | 2023.04.22 |
[HongEat] 리팩토링 - 변경사항 (0) | 2023.04.22 |
[HongEat] 리팩토링, 어떻게 진행했는가 (0) | 2023.04.22 |