JPA를 사용해서 데이터베이스와 통신하기 위해 UserResource를 복사해서 UserJpaResource를 만들겠습니다.
UserRepository를 사용합니다.package study.rest.webservices.restfulwebservices.user;
import jakarta.validation.Valid;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import study.rest.webservices.restfulwebservices.jpa.UserRepository;
import java.net.URI;
import java.util.List;
import java.util.Optional;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@RestController
public class UserJpaResource {
private UserRepository repository;
public UserJpaResource(UserRepository repository) {
this.repository = repository;
}
//GET /users
@GetMapping("/jpa/users")
public List<User> retrieveAllUsers() {
return repository.findAll();
}
//EntityModel
//WebMvcLinkBuilder
@GetMapping("/jpa/users/{id}")
public EntityModel<User> retrieveUser(@PathVariable("id") int id) {
Optional<User> user = repository.findById(id);
if (user.isEmpty()) {
throw new UserNotFoundException("id:" + id);
}
EntityModel<User> entityModel = EntityModel.of(user.get());
WebMvcLinkBuilder link = linkTo(methodOn(this.getClass()).retrieveAllUsers());
entityModel.add(link.withRel("all-users"));
return entityModel;
}
@DeleteMapping("/jpa/users/{id}")
public void deleteUser(@PathVariable int id) {
repository.deleteById(id);
}
//POST /users
@PostMapping("/jpa/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
User savedUser = repository.save(user);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).build();
}
}