목차
0. 환경
- windows10
- openjdk version "1.8.0_242"
- STS4 TooL (이클립스)
- Postman (API Test Tool)
1. 세팅
- API Json 응답을 위해 Jackson 라이브러리를 Maven에 추가해줍니다.
- jackson-core, jackson-databind
- Jackson은 JSON 데이터 구조를 처리해주는 라이브러리
- Jackson을 추가해주지 않으면 API 응답 시 다음과 같은 에러가 발생합니다.
- No converter found for return value of type
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
2. 컨트롤러 어노테이션
@Controller
- Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다.
- Data를 반환해야 하는 경우엔 @ResponseBody 어노테이션을 활용해주어야 합니다.
@Controller
public class HomeController {
//view return
@RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
public String home() {
return "home";
}
//Json Data Return @ResponseBody
@ResponseBody
@GetMapping("/testApi1")
public HashMap<String, Object> testApi1() {
HashMap<String, Object> rtnMap = new HashMap<String, Object>();
rtnMap.put("test1", "value1");
return rtnMap;
}
}
@RestController
- Spring MVC의 컨트롤러인 @RestController의 주로 Json 형태로 객체 Data를 반환하기 위해 사용합니다.
- @RestController는 Spring MVC Controlle에 @ResponseBody가 추가된 것이라고 보면 됩니다.
- @RestController 또한 ModelAndView를 이용해 View를 반환할 수 있습니다.
@RestController
public class ApiController {
//Json Data Return
@GetMapping("/testApi2")
public HashMap<String, Object> testApi2() {
HashMap<String, Object> rtnMap = new HashMap<String, Object>();
rtnMap.put("test2", "value2");
return rtnMap;
}
//view return ModelAndView
@RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
public ModelAndView home() {
ModelAndView mav = new ModelAndView();
mav.setViewName("home");
mav.addObject("menuNum", "1");
return mav;
}
}
3. Http Method 어노테이션
@GetMapping
- 클라이언트가 서버의 리소스를 요청할 때 사용합니다.
- 캐시가 가능합니다.
- 브라우저 히스토리에 남습니다.
- 요청 데이터 길이 제한이 있습니다.
- GET 요청은 중요한 정보를 다루면 안 됩니다.
- CRUD(Read)
@PostMapping
- 클라이언트가 서버의 리소스를 수정하거나 새로 만들 때 사용합니다.
- 캐시 되지 않습니다.
- 브라우저 히스토리에 남지 않는다.
- 요청 데이터 길이에 제한이 없다.
- 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보냅니다.
- CRUD(Create)
@PutMapping
- URI에 해당하는 데이터를 새로 만들거나 수정할 때 사용합니다.
- CRUD(전체 Update)
@PatchMapping
- PUT과 유사하게 요청된 자원을 수정(UPDATE)할 때 사용합니다.
- CRUD(부분 Update)
@DeleteMapping
- URI에 해당하는 리소스를 삭제할 때 사용한다.
- CRUD(Delete)
@RequestMapping
- 하나의 컨트롤러 메서드에 여러 HTTP Method를 지정할 때 사용할 수 있습니다.
@RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
RequestMethod.GET
RequestMethod.POST
RequestMethod.DELETE
RequestMethod.HEAD
RequestMethod.OPTIONS
RequestMethod.PATCH
RequestMethod.PUT
RequestMethod.TRACE
4. 예제
- 편의상 Data를 반환하는 메소드와 View를 반환하는 메소드를 같이 작성했습니다.
- Data를 반환하는 RestController와 View를 반환하는 Controller를 분리하여 작성하는 것이 좋습니다.
- 작성 후 Postman툴을 이용하여 테스트합니다.
@Controller
@Controller
public class HomeController {
//View return
@RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
public String home() {
return "home";
}
//String return(Content-Type: text/plain)
@ResponseBody
@GetMapping("/testApi1")
public String testApi1() {
return "String Type";
}
//Object Json return 1(HashMap)
@ResponseBody
@PostMapping("/testApi2")
public HashMap<String, Object> testApi2() {
HashMap<String, Object> rtnMap = new HashMap<String, Object>();
rtnMap.put("test1", "value1");
return rtnMap;
}
//Object Json return 2(User VO)
@ResponseBody
@PostMapping("/testApi3")
public User testApi3() {
User user = new User();
user.setName("veneas");
return user;
}
//User VO
static class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
@RestController
@RestController
public class ApiController {
//String return(Content-Type: text/plain)
@GetMapping("/testApi1")
public String testApi1() {
return "veneas";
}
//Object Json return 1(HashMap)
@PostMapping("/testApi2")
public HashMap<String, Object> testApi2() {
HashMap<String, Object> rtnMap = new HashMap<String, Object>();
rtnMap.put("test2", "value2");
return rtnMap;
}
//Object Json return 2(User VO)
@PostMapping("/testApi3")
public User testApi3() {
User user = new User();
user.setName("veneas");
return user;
}
//User VO
static class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//View return
@RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
public ModelAndView home() {
ModelAndView mav = new ModelAndView();
mav.setViewName("home");
mav.addObject("testData", "1");
return mav;
}
}
'Backend > Spring' 카테고리의 다른 글
[Spring] Spring MVC Project logback 적용 (0) | 2021.10.28 |
---|---|
[Spring] Spring MVC Project Mysql 연동하기 (mysql mybatis hikariCP) (0) | 2021.10.27 |
[Spring] Spring MVC Project(Legacy Project) 생성하기 - STS4 (0) | 2021.10.22 |
[Spring] STS 4 (Spring Tool Suite 4) Tomcat 연동하기 (0) | 2021.10.04 |
[Spring] STS 4 (Spring Tool Suite 4) 프로젝트 자바 버전 변경하기 - Windows 10 (1) | 2021.07.20 |