
사용자를 삭제하기 위해서 먼저 삭제 기능을 만들겠습니다.
package study.rest.webservices.restfulwebservices.user;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
@Component
public class UserDaoService {
private static List<User> users = new ArrayList<>();
private static Integer usersCount = 0;
static {
users.add(new User(++usersCount, "김철수", LocalDate.now().minusYears(30)));
users.add(new User(++usersCount, "문상훈", LocalDate.now().minusYears(25)));
users.add(new User(++usersCount, "선우소희", LocalDate.now().minusYears(20)));
}
public List<User> findAll() {
return users;
}
public User save(User user) {
user.setId(++usersCount);
users.add(user);
return user;
}
public User findOne(int id) {
Predicate<? super User> predicate = user -> user.getId().equals(id);
return users.stream().filter(predicate).findFirst().orElse(null);
}
public void deleteById(int id) {
Predicate<? super User> predicate = user -> user.getId().equals(id);
users.removeIf(predicate);
}
}
removeIf: 컬렉션 클래스들에서 제공되는 메서드로, 주어진 조건에 해당하는 요소들을 컬렉션에서 제거하는 기능을 합니다.
UserResource에서 삭제기능을 담당하는 메서드를 생성합니다.
package study.rest.webservices.restfulwebservices.user;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import java.net.URI;
import java.util.List;
@RestController
public class UserResource {
private UserDaoService service;
public UserResource(UserDaoService service) {
this.service = service;
}
//GET /users
@GetMapping("/users")
public List<User> retrieveAllUsers() {
return service.findAll();
}
//GET /users/{id}
@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
User user = service.findOne(id);
if (user == null) {
throw new UserNotFoundException("id:" + id);
}
return user;
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable int id) {
service.deleteById(id);
}
//POST /users
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = service.save(user);
// users/4 => users/{id}, user.getID
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).build();
}
}
UserDaoService에서 만들어 놓은 deleteById()를 사용해서 @PathVariable로 받아온 id를 조회한 후 삭제 합니다.

