Reputation: 31
Hello I am new to Spring Boot, I have developed the API to get, create and delete a single record by ID, now I want to make a request to delete selected multiple records. Example: I like to delete 4 records out of 10 records in a single request instead of making 4 delete requests.
ProjectController.java
@Qualifier("projectServiceImpl")
@Autowired
private ProjectService projectService;
@Autowired
private MapValidationErrorService mapValidationErrorService;
@PostMapping("")
public ResponseEntity<?> createNewProject(@Valid @RequestBody Project project, BindingResult result){
ResponseEntity<?> errorMap = mapValidationErrorService.MapValidationService(result);
if(errorMap!=null) return errorMap;
Project project1 = projectService.saveOrUpdateProject(project);
return new ResponseEntity<Project>(project1, HttpStatus.CREATED);
}
@GetMapping("/{id}")
public ResponseEntity<?> findProjectById(@PathVariable Long id){
Project project = projectService.findProjectById(id);
return new ResponseEntity<Project>(project, HttpStatus.OK);
}
@GetMapping("")
public List<Project> getAllProjects(){return projectService.findAllProjects();}
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteProject(@PathVariable Long id){
projectService.deleteProjectById(id);
return new ResponseEntity<String>("Project with id: '"+id+ "' was deleted", HttpStatus.OK);
}
ProjectServiceImpl.java
@Autowired
private ProjectRepository projectRepository;
@Override
public long count() {
return projectRepository.count();
}
public Project saveOrUpdateProject(Project project){
try{
project.setProjectNumber(project.getProjectNumber());
return projectRepository.save(project);
}catch (Exception e){
throw new ProjectNumberException("The project number "+project.getProjectNumber()+" is already existed. Please select a different project number.");
}
}
public Project findProjectById(Long id) {
return projectRepository.findById(id).orElse(null);
}
public List<Project> findAllProjects() {
return projectRepository.findAll();
}
public void deleteProjectById(Long id) {
Project project = projectRepository.findById(id).orElse(null);;
projectRepository.delete(project);
}
ProjectRepository.java
@Repository
public interface ProjectRepository extends JpaRepository<Project, Long>, QuerydslPredicateExecutor<Project> {}
Upvotes: 3
Views: 1351
Reputation: 1379
I had similar issue. Below solution solved my problem:
ProjectController.java:
@PostMapping("/")
public ResponseEntity<?> deleteProject(@RequestBody Long[] ids){
projectService.deleteProjectById(ids);
return new ResponseEntity<String>("Project with ids: '"+ids+ "' was deleted",
HttpStatus.OK);
}
ProjectServiceImpl.java
public void deleteProjectById(Long[] ids) {
for (Long id : ids) {
Project project = projectRepository.findById(id).orElse(null);
projectRepository.delete(project);
}
}
Upvotes: 0
Reputation: 19956
You can add a method like this in the ProjectRepository
@Modifying
@Query("delete from Project where id in (:ids)")
int deleteByIds(@Param("ids") List<Long> ids);
You need an endpoint to process such JSON request
{
"ids" : [1, 2, 3]
}
Upvotes: 3