1. @RestController
- Spring MVC가 제공함
- Spring 4에서 Rest API 또는 Web API를 개발하기 위해 등장한 애노테이션
- 이전 버전의 @Controller와 @ResponseBody를 포함함
MessageConverter
- 자바 객체와 HTTP 요청 및 응답 바디를 변환하는 역할
- @ResponseBody, @RequestBody
- @EnableWebMvc로 인한 기본 설정
ex) 외부에서 전달받은 JSON 메소드를 내부에서 사용할 수 있는 객체로 변환하기
ex) 컨드롤러가 리턴한 객체를 JSON으로 변환해서 클라이언트에게 전달할 수 있도록 하기
JSON 응답하기
- 컨트롤러의 메소드에서는 JSON으로 변환될 객체를 반환함
- jackson 라이브러리를 추가할 경우, 객체를 JSON으로 변환하는 MessageConverter가 사용되도록 @EnableWebMvc에서 기본으로 설정되어 있음
- jackson 라이브러리를 추가하지 않으면, JSON 메시지로 변환할 수 없어 500에러 발생함
- 사용자 임의의 MessageConverter를 사용하도록 하려면, WebMvcConfigurerAdapter의 configureMessageConverters 메소드를 오버라이딩하도록 함
2. @RestController 활용 실습
# pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.15.0</version>
</dependency>
# GuestbookApiController.java
package com.example.guestbook.controller;
import com.example.guestbook.dto.Guestbook;
import com.example.guestbook.service.GuestbookService;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping(path="/guestbooks")
public class GuestbookApiController {
@Autowired
GuestbookService guestbookService;
@GetMapping // path는 @RequestMapping을 통해 공통으로 주어짐
// ContentType이 applicaiton/json으로 요청이 들어옴
// DispatcherServlet는 JSON MessageConverter를 내부적으로 사용하여 해당 Map 객체를 JSON으로 변환해서 전송함
public Map<String, Object> list(@RequestParam(name = "start", required = false, defaultValue = "0") int start) {
List<Guestbook> list = guestbookService.getGuestbooks(start);
int count = guestbookService.getCount();
int pageCount = count / GuestbookService.LIMIT;
if(count % GuestbookService.LIMIT > 0) pageCount++;
List<Integer> pageStartList = new ArrayList<>();
for(int i = 0; i < pageCount; i++) {
pageStartList.add(i * GuestbookService.LIMIT);
}
Map<String, Object> map = new HashMap<>();
map.put("list", list);
map.put("count", count);
map.put("pageStartList", pageStartList);
return map;
}
@PostMapping
// Guestbook 객체도 JSON 메소드로 변환되어 클라이언트에게 전달됨
public Guestbook write(@RequestBody Guestbook guestbook, HttpServletRequest request) {
String clientIp = request.getRemoteAddr();
Guestbook resultGuestbook = guestbookService.addGuestbook(guestbook, clientIp);
return resultGuestbook;
}
@DeleteMapping("/{id}")
public Map<String, String> delete(@PathVariable(name = "id") Long id, HttpServletRequest request) {
String clientIp = request.getRemoteAddr();
int deleteCount = guestbookService.deleteGuestbook(id, clientIp);
return Collections.singletonMap("success", deleteCount > 0 ? "true" : "flase");
}
}
테스트 - Talend API Tester 활용
# GetMapping 테스트
# PostMapping 테스트
# DeleteMapping 테스트
'강의 노트 > 웹 프로그래밍(풀스택)' 카테고리의 다른 글
[boostcourse] 5.5. Spring MVC에서의 Session 사용하기 - BE (0) | 2023.07.11 |
---|---|
[boostcourse] 5.4. Cookie & Session - BE (0) | 2023.07.10 |
[boostcourse] 3.10. Layered Architecture - BE (2) (0) | 2023.06.27 |
[boostcourse] 3.10. Layered Architecture - BE (1) (0) | 2023.06.27 |
[boostcourse] 3.9. Spring MVC - BE (2) (0) | 2023.06.26 |