Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- jsp
- 동읍면 DB
- Forensic 절차
- react
- EER
- frontend
- SessionAttribute
- Layered Architecture
- 인턴 후기
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
- Database
- spring
- 정보보호병 후기
- JSTL
- reversing.kr
- 메모리 포랜식
- 행정지역 DB
- Django
- restapi
- webhacking 처음
- mysql
- 네이버 인턴
- PyAmdecoder
- 인턴 지원
- 소프트웨어 개발보안 경진대회
- DBMS
- riceteacatpanda
- 방명록 만들기
- 소개딩
- 3단계 지역 DB
Archives
- Today
- Total
웹찢남
Spring - Controller 본문
@RestController - Rest API 또는 Web API를 개발하기 위해 등장
- 이전 버전의 @Controller @ResponseBody 포함
MessageConvertor
- 자바 객체와 HTTP 요청 / 응답 바디를 변환
json 응답하기
- 컨트롤러의 메소드에서는 json으로 변환될 객체를 반환
- jackson 라이브러리를 추가할 경우 객체를 json으로 변환하는 메시지 컨버터가 사용되도록 @EnableWebMvc에서 기본으로 설정
- jackson 라이브러리를 추가하지 않으면 json 메시지로 변환할 수 없어 500 에러 발생
- 사용자가 임의의 메시지 컨버터를 사용하려면 WebMvcConfigurerAdapter의 configureMessageConverters 메소드를 오버라이딩하도록 함
<jackson2.version>2.8.6</jackson2.version> (property)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson2.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jackson2.version}</version>
</dependency>
실제 실습
package kr.or.connect.guestbook.controller;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import kr.or.connect.guestbook.dto.Guestbook;
import kr.or.connect.guestbook.service.GuestbookService;
@RestController
@RequestMapping(path="/guestbooks") //같은 매핑으로 여러 동작을 수행하여 안쪽에 있는 method도 공통으로 사용 가능
public class GuestbookApiController {
@Autowired
GuestbookService guestbookService;
@GetMapping //path가 없는 이유는 RequestMapping 때문
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
public Guestbook write(@RequestBody Guestbook guestbook,
HttpServletRequest request) {
String clientIp = request.getRemoteAddr();
// id가 입력된 guestbook이 반환된다.
Guestbook resultGuestbook = guestbookService.addGuestbook(guestbook, clientIp);
return resultGuestbook;
}
@DeleteMapping("/{id}") //id는 pathvariable임
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" : "false");
}
}
아래의 사진들은 각각 DELETE, POST, GET 요청을 해당 URI로 보낸 결과 (Talend API Tester 사용)
'BACK_END > Spring 공부' 카테고리의 다른 글
Spring - Security (0) | 2021.03.04 |
---|---|
Spring - 상태유지기술 (0) | 2021.02.25 |
Spring - REST API (0) | 2021.02.25 |
Spring - 방명록 만들기 (0) | 2021.02.25 |
Spring - 레이어드 아키텍처 (0) | 2021.02.23 |
Comments