카페 검색 api를 생성하는데, @RequestParam이 너무 많아져 고민이 되던 차에 팀원분께서 알려주신 방법을 사용하여 훨씬 간결하게 코드를 작성할 수 있었다.
전
@GetMapping(value = "/themes")
public PageResponse<ThemeDto.Response> getThemes(
@RequestParam(required = false) String searchWord, @RequestParam(required = false) Long locationId,
@RequestParam(required = false) Long categoryId, @RequestParam(required = false) Integer minNumPeople,
@RequestParam(required = false) Double difficultyRangeFrom, @RequestParam(required = false) Double difficultyRangeTo,
@RequestParam(required = false) Double deviceRatioRangeFrom, @RequestParam(required = false) Double deviceRatioRangeTo,
@RequestParam(required = false) Double activityRangeFrom, @RequestParam(required = false) Double activityRangeTo,
@RequestParam(required = false) Integer timeLimitRangeFrom, @RequestParam(required = false) Integer timeLimitRangeTo,
@PageableDefault(size=20) Pageable pageable) {
ThemeSearchOptions searchOptions = new ThemeSearchOptions(searchWord, locationId, categoryId, minNumPeople, difficultyRangeFrom, difficultyRangeTo,
deviceRatioRangeFrom, deviceRatioRangeTo, activityRangeFrom, activityRangeTo, timeLimitRangeFrom, timeLimitRangeTo);
return responseService.getPageResponse(themeService.getThemes(searchOptions, pageable));
}
후
@GetMapping(value = "/themes")
public PageResponse<ThemeDto.Response> getThemes(
ThemeSearchOptions searchOptions, @PageableDefault(size=20) Pageable pageable) {
return responseService.getPageResponse(themeService.getThemes(searchOptions, pageable));
}
ThemeSearchOptions 클래스
@Data
public class ThemeSearchOptions {
private String searchWord;
private Long locationId;
private Long categoryId;
private Integer minNumPeople;
private Double difficultyRangeFrom;
private Double difficultyRangeTo;
private Double deviceRatioRangeFrom;
private Double deviceRatioRangeTo;
private Double activityRangeFrom;
private Double activityRangeTo;
private Integer timeLimitRangeFrom;
private Integer timeLimitRangeTo;
}