반응형
Spring Boot를 이용한 RESTful Web Services 개발
게시물 관리를 위한 Post Entity 추가와 초기 데이터 생성
사용자가 작성할 수 있는 게시물 관련 Entity를 만들어보자. 사용자는 여러 개의 게시글을 작성할 수 있으며, 아예 작성을 하지 않을 수도 있다. 반대로 게시글은 사용자가 없으면 생성되지 못한다. 즉 User가 필수 데이터, Post가 옵셔널 데이터라고 생각하면 된다.
- Post.java 생성
...
public class Post {
@Id
@GeneratedValue
private Integer id;
private String description;
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private Users user;
}
- ManyToOne : Post 입장에서 봤을 때 여러 개의 데이터가 존재할 때 User 데이터가 적어도 한 개는 있어야한다는 의미이다.
- JsonIgnore : Json 포맷으로 응답 시 해당 어노테이션이 붙은 데이터는 외부로 노출되지 않는다.
- fetch = FetchType.LAZY : 지연 로딩 방식. 지연 로딩 방식은 사용자 Entity를 조회할 때 Post Entity가 같이 로딩 되는 것이 아니라 Post 데이터가 로딩되는 시점에 같이 User 데이터도 가져온다는 의미이다.
반응형
- Users.java
@OneToMany(mappedBy = "user")
private List<Post> post;
- OneToMany : User 입장에서 봤을 때 한 명의 사용가자 있으면 여러 개의 게시글을 작성 할 수 있다.
- mappedBy는 Post.java에서 관계를 설정해준 필드 명을 기재한다.
- data.sql
Post 더미 데이터 생성
insert into post values(10001, 'My first post', 9901);
insert into post values(10002, 'My second post', 9902);
서버 재실행 후 h2 데이터베이스 확인
게시물 조회를 위한 Post Entity와 User Entity와의 관계 설정
Post Entity를 이용한 메서드를 작성하자.
- UserJapController.java
@GetMapping("/users/{id}/post")
public List<Post> retrieveAllPostByUser(@PathVariable int id) {
Optional<Users> user = userRepository.findById(id);
if(!user.isPresent()) {
throw new UserNotFoundException(String.format("ID [%s] not found.", id));
}
return user.get().getPost();
}
서버 재실행 후 포스트맨 확인
반응형
나는 더미 데이터에 9901 사용자 게시글을 하나만 insert해서 post 한 개 데이터만 보인다.
전체 사용자 목록 조회 시에도 Post 데이터를 확인할 수 있다.
JPA를 이용한 새 게시물 추가 - POST HTTP Method
- PostRepository.interface 생성
@Repository
public interface PostRepository extends JpaRepository<Post, Integer> {
}
- UserJapController.java
@PostMapping("/users/{id}/posts")
public ResponseEntity<Post> createPost(@PathVariable int id,
@RequestBody Post post) {
// user id 검색 후 저장
Optional<Users> user = userRepository.findById(id);
if(!user.isPresent()) throw new UserNotFoundException(String.format("ID [%s] not found", id));
// user 객체 저장
post.setUser(user.get());
Post savedPost = postRepository.save(post);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedPost.getId())
.toUri();
return ResponseEntity.created(location).build();
}
반응형
서버 재실행 후 포스트맨 확인
사용자 게시글 조회
추가가 된 걸 확인할 수 있다.
- 출처 : 인프런 Spring Boot를 이용한 RESTful Web Services 개발 강의
반응형