JpaRepository 상속
- UserRepository를 만들어서 JpaRepository에 상속받도록 한다.
public interface UserRepository extends JpaRepository<(엔티티클래스이름), (아이디 데이터타입 ex. Integer)> {
}
- UserJpaResource 만들기! (REST API Controller 역할!)
package com.in28minutes.rest.webservices.restful_web_services.user;
import com.in28minutes.rest.webservices.restful_web_services.jpa.UserRepository;
import com.in28minutes.rest.webservices.restful_web_services.user.User;
import com.in28minutes.rest.webservices.restful_web_services.user.UserDaoService;
import com.in28minutes.rest.webservices.restful_web_services.user.UserNotFoundException;
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 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;
}
@GetMapping("/jpa/users")
public List<User> retrieveAllUsers() {
return repository.findAll();
}
@GetMapping("/jpa/users/{id}")
public User retrieveUsers(@PathVariable 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.getContent();
}
@PostMapping("/jpa/users")
public ResponseEntity<Object> 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();
}
@DeleteMapping("/jpa/users/{id}")
public void deleteUser(@PathVariable int id) {
repository.deleteById(id);
}
}