๐ก
1. Optional<T> ์ ๋ํ ๊ฐ๋ ์ ์์ง ํ๋ค.
2. ๊ฒฝ๋ก ๋ณ์(Path variable)์ ๋ํ ๊ฐ๋ ์ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
BlogService ํ์ผ์ ๊ฒ์๊ธ ์กฐํ ๋ก์ง ์ถ๊ฐ - 1
@RequiredArgsConstructor
@Service // IoC (๋น์ผ๋ก ๋ฑ๋ก)
public class BlogService {
//@Autowired // DI <-- ๊ฐ๋ฐ์๋ค์ด ๊ฐ๋
์ฑ ๋๋ฌธ์ ์์ฑ์ ํด์ค๋ค.
private final PostRepository postRepository;
@Transactional // (์์
์ ๋จ์) // ์ฐ๊ธฐ ์ง์ฐ ์ฒ๋ฆฌ๊น์ง
public Article save(ArticleDTO dto) {
// ๋น์ฆ๋์ค ๋ก์ง์ด ํ์ํ๋ค๋ฉด ์์ฑ...
return postRepository.save(dto.toEntity());
}
// ์ ์ฒด ๊ฒ์๊ธ ์กฐํ ๊ธฐ๋ฅ
public List<Article> findAll(){
List<Article> articles = postRepository.findAll();
return articles;
}
// ์์ธ ๋ณด๊ธฐ ๊ฒ์๊ธ ์กฐํ
public Article findById(Integer id) {
// Optional<T>๋ Java 8์์ ๋์
๋ ํด๋์ค์ด๋ฉฐ,
// ๊ฐ์ด ์กด์ฌํ ์๋ ์๊ณ ์์ ์๋ ์๋ ์ํฉ์ ๋ช
ํํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
return postRepository.findById(id).orElseThrow(() -> new Exception400("ํด๋น ๊ฒ์๊ธ์ด ์์ต๋๋ค."));
}
}
Optional<T> (Optional์ ์ฌ์ฉํ์ฌ null ์ฒ๋ฆฌ๋ฅผ ์์ ์ฒ๋ฆฌ ํ๊ธฐ ์ํจ)
- ๊ฐ์ด ์กด์ฌํ ๋: Optional ์์ ๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด ๊ฐ์ ์์ ํ๊ฒ ๊บผ๋ด์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ฐ์ด ์์ ๋: Optional์ด ๋น์ด ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด null์ ์ง์ ์ฒ๋ฆฌํ๋ ๋์ , ๋ค์ํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ด์๋ ์ํฉ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
BlogApiController
@RequiredArgsConstructor
@RestController // @controller + @responsebody
public class BlogApiController {
private final BlogService blogService;
// URL , ์ฆ, ์ฃผ์ ์ค๊ณ - http://localhost:8080/api/article
@PostMapping("/api/articles")
public ResponseEntity<Article> addArticle(@RequestBody ArticleDTO dto) {
// 1. ์ธ์ฆ ๊ฒ์ฌ
// 2. ์ ํจ์ฑ ๊ฒ์ฌ
Article savedArtilce = blogService.save(dto);
return ResponseEntity.status(HttpStatus.CREATED).body(savedArtilce);
}
// URL , ์ฆ, ์ฃผ์ ์ค๊ณ - http://localhost:8080/api/articles
@GetMapping(value = "/api/articles", produces = MediaType.APPLICATION_JSON_VALUE)
public ApiUtil<?> getAllArticles() {
List<Article> articles = blogService.findAll();
if(articles.isEmpty()) {
// return new ApiUtil<>(new Exception400("๊ฒ์๊ธ์ด ์์ต๋๋ค."));
throw new Exception400("๊ฒ์๊ธ์ด ์์ต๋๋ค.");
}
return new ApiUtil<>(articles);
}
// URL , ์ฆ, ์ฃผ์ ์ค๊ณ - http://localhost:8080/api/articles/1
@GetMapping(value = "/api/articles/{id}")
public ApiUtil<?> findArtilcle(@PathVariable(name = "id") Integer id) {
// 1. ์ ํจ์ฑ ๊ฒ์ฌ ์๋ต
Article article = blogService.findById(id);
return new ApiUtil<>(article);
}
}
์คํ ํ๋ฉด_____