Spring数据不正确地形成了请求



我有表格任务:

create table tasks
(
id          bigserial,
title       varchar(25) not null,
leader_id   bigint      not null,
project_id  bigint      not null,
deadline    date        not null,
primary key (id),
foreign key (leader_id) references users (id),
foreign key (project_id) references projects (id),
is_archived BOOLEAN default FALSE
);

任务休息控制器:

@GetMapping
public List<Task> getAllTasksByProjectId(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(required = false) MultiValueMap<String, String> params) {
TaskFilter taskFilter = new TaskFilter(params);
return taskService.findAllTasksByProject(taskFilter.getSpec(), page - 1, 5).getContent();
}

服务:

public Page<Task> findAllTasksByProject(Specification<Task> spec, int page, int size) {
return taskRepository.findAll(spec, PageRequest.of(page, size));
}

存储库:

@Repository
public interface TaskRepository extends JpaRepository<Task, Long>, JpaSpecificationExecutor<Task> {
}

过滤器:

public TaskFilter(MultiValueMap<String, String> params) {
spec = Specification.where(null);
if (params.containsKey("is_archived")) {
spec.and(TaskSpecifications.isArchived(Boolean.parseBoolean(params.getFirst("is_archived"))));
System.out.println(params.getFirst("is_archived"));
}
if (params.containsKey("project")) {
spec = spec.and(TaskSpecifications.projectEqual(Long.parseLong(params.getFirst("project"))));
}
}

规格:

public static Specification<Task> projectEqual(Long projectId) {
return (Specification<Task>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("project"), projectId);
}
public static Specification<Task> isArchived(Boolean isArchived) {
return (Specification<Task>) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("isArchived"), isArchived);
}

因此,我想获得_archived=true或false的所有任务。但我得到了所有的任务。对于出口,请向发出请求

localhost:8189/tm/api/v1/tasks?page=1&is_archived=错误

返回is_archived=true和false的任务。这可能是什么问题?

我在这一行有错误:

spec.and(TaskSpecifications.isArchived(Boolean.parseBoolean(params.getFirst("is_archived"))));

每次我创建新的规范,而不是添加旧的规范。

spec = spec.and(TaskSpecifications.isArchived(Boolean.parseBoolean(params.getFirst("is_archived"))));

相关内容

最新更新