@GetMapping
public ResponseEntity<Page<CsatSurveyModel>> getAllSurveys(
@RequestParam(required = false) String teamName,
@RequestParam(required = false) String customerName,
@RequestParam(required = false) Integer year,
@RequestParam(defaultValue = "id") String orderBy,
@RequestParam(defaultValue = "DESC") Direction direction,
@RequestParam(defaultValue = AppConstant.DEFAULT_PAGE) int page,
@RequestParam(defaultValue = AppConstant.DEFAULT_PAGE_SIZE) int size) {
Sort sort = Sort.by(direction, orderBy);
Pageable pageRequest = PageRequest.of(page, size, sort);
Specification<CsatSurvey> csatSurveySpecification = Specification.where(null);
if (Objects.nonNull(teamName)) {
csatSurveySpecification = csatSurveySpecification.and(CsatSurvey.teamNameSpec(teamName));
}
if (Objects.nonNull(customerName)) {
csatSurveySpecification =
csatSurveySpecification.and(CsatSurvey.customerNameSpec(customerName));
}
if (Objects.nonNull(year)) {
csatSurveySpecification = csatSurveySpecification.and(CsatSurvey.yearSpec(year));
}
UserModel loggedInUser = sessionUtils.getLoggedInUser();
List<Team> teams =
UserRole.ADMIN.equals(loggedInUser.getRole())
? Collections.emptyList()
: loggedInUser.getTeams();
Page<CsatSurveyModel> csatSurveyModels =
csatService.getAllSurveysForTeams(teams, csatSurveySpecification, pageRequest);
return ResponseEntity.ok(csatSurveyModels);
}
前三个参数是用于过滤的目的与规范。其余的是为页面请求。我想知道是否有一个更好的方法来做到这一点。有很多的代码在控制器中,即使我想把处理移动到服务层,该方法将不得不接受一个很长的参数列表,我不想这样做。虽然这个方法只接受七个参数,还有其他接受十个以上参数的路由。
我知道一种方法是将所有这些参数都作为Map<String, String>
接受,但是处理它是不是有点乏味?
2条答案
按热度按时间jtoj6r0c1#
我的方法是使用请求类。
这样做的好处是,您可以在不更改控制器和服务的方法签名的情况下更改参数(假设您也将请求对象传递给服务)。
其中UserDataRequest是一个简单的类,包含getter和setter。
等等。
5m1hhzi42#
Spring MVC可以直接将
Pageable
(或Sort
)作为控制器参数,Spring Data可以接受一个作为查询参数。