[Spring] @RequestParam 여러개 대신 모델 클래스로 처리하기

하스레·2022년 10월 6일
1

카페 검색 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;       
}

참고
https://bum752.github.io/posts/Spring-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%97%90%EC%84%9C-Request-Parameter%EB%A5%BC-%EB%AA%A8%EB%8D%B8-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A1%9C-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0/

profile
Software Developer

0개의 댓글