[REST API] User의 모든 Post글을 가져오는 GET API & User의 Post를 create할 POST API 구현하기

민지·2024년 3월 19일
0

REST API - Spring Boot

목록 보기
26/27

User의 모든 Post글을 가져올 GET API 구현하기

뭘 할 것인지?

  • 그럼 이제, Post resource에 대한 REST API를 만들 시간이다!
    • Retrieve all posts for a User
      • GET /users/{id}/posts
    • Create a post for a User
      • POST /users/{id}/posts

이제 위의 GET API와 POST API 구현과정을 정리해보자.


구현 과정

restfulwebservices/user/UserJpaResource.java Modified

// GET /users/{id}/posts
@GetMapping("/jpa/users/{id}/posts")
public List<Post> retrievePostsForUser(@PathVariable("id") int id) {
	User user = repository.findById(id).get();

	if (user == null) {
		throw new UserNotFoundException("id" + id);
	}

	return user.getPosts();
}

실행결과,


User의 Post를 create할 POST API 구현하기

뭘 할건지?

  • Create a post for a User
    • POST /users/{id}/posts

구현과정

restfulwebservices/jpa/PostRepository.java New

user 데이터들을 저장할 UserRepository가 있듯이, Post 게시글 데이터들을 저장할 PostRepository를 만들어야 한다!

package com.minjiki2.rest.webservices.restfulwebservices.jpa;
import org.springframework.data.jpa.repository.JpaRepository;
import com.minjiki2.rest.webservices.restfulwebservices.user.Post;

public interface PostRepository extends JpaRepository<Post, Integer> {

}

restfulwebservices/user/Post.java Modified

@Size(min = 20)
private String description;

@ManyToOne
@JsonIgnore
private User user;

public User getUser() {
	return user;
}

public void setUser(User user) {
	this.user = user;
}

restfulwebservices/user/UserJpaResource.java Modified

private PostRepository postRepository;

public UserJpaResource(UserRepository repository, PostRepository postRepository) {
	this.repository = repository;
	this.postRepository = postRepository;
}

// POST /users/{id}/posts
@PostMapping("/jpa/users/{id}/posts")
public ResponseEntity<Object> createPostForUser(@PathVariable("id") int id, @Valid @RequestBody Post post) {

	User user = userRepository.findById(id).get();

	if (user == null) {
		throw new UserNotFoundException("id" + id);
	}

	post.setUser(user);

	Post savedPost = postRepository.save(post);

	// /jpa/users/{id}/posts/{post_id}
	URI location = ServletUriComponentsBuilder.fromCurrentContextPath()

			.path("/{id}").buildAndExpand(savedPost.getId()).toUri();

	return ResponseEntity.created(location).build();
}
  • post를 save했다면, 추가된 post의 URL도 만들어야 함

  • /jpa/users/{id}/posts/{post_id}
    fromCurrentContextPath() → 현재 request의 url을 반환해준다. 즉 /jpa/users/{id}/posts를 반환

    path() → 현재 url에 /{post_id} url를 append시키고,

    buildAndExpand로 path parameter값을 추가된 post_id로 replace시키고,

    toUri() → URI 클래스 형태로 반환시켜준다

실행결과,





참고 및 출처
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/

profile
배운 내용을 바로바로 기록하자!

0개의 댓글