-
HTTP와 RestControllerBack end/SpringBoot 2023. 12. 8. 12:36
- Controller < - > RestController
Controller는 일반 페이지를 retrun 하는 반면 < - > RestController는 json과 return하는 text 즉 data를 반환한다.
예시 코드!!
package com.example.firstproject.api; import com.example.firstproject.dto.ArticleForm; import com.example.firstproject.entity.Article; import com.example.firstproject.repository.ArticleRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; @Slf4j @RestController// RestAPI용 컨트롤러! 데이터(JSON)를 반환 public class ArticleApiController { @Autowired// DI private ArticleRepository articleRepository; // GET @GetMapping("/api/articles") public List<Article> index() { return articleRepository.findAll(); } @GetMapping("/api/articles/{id}") public Article index(@PathVariable Long id) { return articleRepository.findById(id).orElse(null); } // POST @PostMapping("/api/articles") public Article index(@RequestBody ArticleForm dto) { // RestController에서 dto를 받으려면 RequestBody를 작성해야함 Article article = dto.toEntity(); return articleRepository.save(article); } // PATCH @PatchMapping("/api/articles/{id}") public ResponseEntity<Article> update(@PathVariable Long id, // ResponseEntity<> 는 상태코드(200번,400번 등) 을 보낼수 있다. @RequestBody ArticleForm dto) { // RestController에서 dto를 받으려면 RequestBody를 작성해야함 // 1. 수정용 엔티티 생성 Article article = dto.toEntity(); log.info("id: {}, article: {}", id, article.toString()); // 2. 대상 엔티티를 조회 Article target = articleRepository.findById(id).orElse(null); // 3. 잘못된 요청 처리(대상이 없거나, id가 다른 경우) if (target == null || id != article.getId()) { // 400, 잘못된 요청 응답! log.info("잘못된요청! id: {}, article: {}", id, article.toString()); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); // 400번 오류 } // 4. 업데이트 및 정상 응답(200) target.patch(article); // id,title,content중 하나가 빠져도 기존 데이터는 유지할수 있게 만듬. Article updated = articleRepository.save(target); return ResponseEntity.status(HttpStatus.OK).body(updated); } // DELETE @DeleteMapping("/api/articles/{id}") public ResponseEntity<Article> delete (@PathVariable Long id) { // 대상 찾기 Article target = articleRepository.findById(id).orElse(null); // 잘못된 요청 처리 if (target == null){ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } //대상 삭제 articleRepository.delete(target); // 데이터 반환 return ResponseEntity.status(HttpStatus.OK).build(); } }
'Back end > SpringBoot' 카테고리의 다른 글
테스트 작성하기 (0) 2023.12.12 서비스 계층과 트랜잭션 (0) 2023.12.11 폼 데이터 주고 받기 (0) 2023.11.29 뷰 템플릿과 MVC 패턴 (2) 2023.11.29 Controller -> Service -> Dao || repository -> dbms (0) 2023.11.16