【发布时间】:2019-07-16 05:00:27
【问题描述】:
我有一个表格,其中显示姓名、电子邮件等,但也列出了某个用户拥有的角色或能力。
我在使用角色数组过滤表格时遇到问题。一个用户可以有多个角色,下表显示了这一点。我需要能够通过选择例如两个角色进行过滤:“服务经理”和“物流经理”。服务器响应应该是所有具有这些角色的用户。
获取过滤用户的控制器函数:
@PreAuthorize("hasAuthority('service_manager')")
@RequestMapping(path = "/workers", method = RequestMethod.GET)
public Page<WorkDetailResponse> getWorkers(
@RequestParam(defaultValue = "0") Integer page,
@RequestParam(defaultValue = "10") Integer size,
@RequestParam(required = false) String name,
@RequestParam(required = false) BigInteger phone,
@RequestParam(required = false) String email,
@RequestParam(required = false) Set<Competence> competences,
@RequestParam(required = false) Set<UserRole> roles,
@RequestParam(required = false) User.UserStatus status,
@RequestParam(defaultValue = "createTime") String sort,
@RequestParam(defaultValue = "desc") String sortDir
){
WorkDetailListRequest request = new WorkDetailListRequest(name, phone, email, competences, roles, status);
Sort.Direction direction;
if (sortDir.equals("asc")) {
direction = Sort.Direction.ASC;
} else {
direction = Sort.Direction.DESC;
}
return workDetailService.getWorkDetails(request, of(page, size, direction, sort))
.map(WorkDetailResponse::new);
}
这是服务功能:
public Page<WorkDetail> getWorkDetails(WorkDetailListRequest request, Pageable pageable) {
Specification<WorkDetail> spec = where(null);
if (request.getName() != null) spec = spec.and(name(request.getName()));
if (request.getPhone() != null) spec = spec.and(phoneOne(request.getPhone()));
if (request.getEmail() != null) spec = spec.and(email(request.getName()));
if (request.getCompetences() != null) spec = spec.and(competences(request.getCompetences()));
if (request.getRoles() != null) spec = spec.and(roles(request.getRoles()));
if (request.getStatus() != null) spec = spec.and(status(request.getStatus()));
return workDetailRepository.findAll(spec, pageable);
}
这是角色的规范:
public static Specification<WorkDetail> roles(Set<UserRole> roles) {
return (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("user").get("roles"), roles);
}
目前,当我从前端发送角色对象时,它会将它们作为字符串发送,并且 Spring boot 会引发错误
Failed to convert value of type 'java.Lang.String' to required type 'java.util.Set'
【问题讨论】:
标签: java spring-boot