학원에서 자바를 배울 때에는 spring을 통해서 홈페이지를 구현했었다.
하지만 회사에서 주어진 미션은 json 데이터를 주고 받기.
Json 데이터가 포함된 http call 을 처리하여 Json으로 응답을 주면 되는 것이었다. 웹 페이지의 UI는 만들 필요가 없었고 응답하는 데이터를 웹 화면에 띄우기만 하면 되었다.
배운게 Spring mvc 밖에 없었기 때문에 mvc 구조 중 mv를 걷어내고 Controller 만 구현하면 된다고 생각했다.
그래서 몇 날 며칠을 고생하며 학원에서 만들었었던 프로젝트에서 빼고 빼고 또 xml 설정하고 mapper 설정하고... ㅠㅠ 헛고생을 했다... 그렇게 혼자 씨름하다가 json을 좀 더 쉽게 처리할 수 있는 spring boot를 알게 되었다.
Spring Boot 특징
대부분의 스프링 부트 어플리케이션은 매우 적은 spring 환경설정으로도 사용할 수 있다.
- 독립적인 스프링 어플리케이션을 만들 수 있다.
- 내장된 Tomcat, Jetty 등 기본 기능이 있다. (WAR 파일을 설정할 필요가 없다.)
- 빌드 환경설정을 간편화하기 위한 독자적인 'starter' dependency를 제공한다.
- 자동적으로 스프링과 3rd party 라이브러리로 구성되어 있다.
- 매트릭스, 상태 확인 그리고 외부 환경구성 등이 미리 설정된 제작 툴을 제공한다.
- XML 환경설정을 위한 코드 구성 및 요구사항이 전혀 없다.
(출처 : https://spring.io/projects/spring-boot)
쉽게 말해서 spring 에서 mvc 구조를 위해 설정했던 수많은 xml 파일이나 bean 설정 tomcat 연결 등이 필요 없다는 얘기이다.
내장된 톰캣으로 쉽게 run 할 수 있으며, pom.xml 에 dependency만 설정하면 spring의 특징은 모두 사용할 수 있다.
이클립스에서 스프링 부트를 사용하기 위해서는 상단메뉴 -> Help -> Eclipse Marketplace 에서 STS 최신 버전을 install 해주면 된당.
프로젝트 생성 시 pom.xml 구성을 미리 설정하는 단계
여기서 DevTool 이랑 Web을 설정해주고 프로젝트를 설정하면 보다 편리하게 사용할 수 있다. 나머지는 필요에 따라서 나중에 추가해도 됨.
Spring Boot에서 Json 처리하기
일단 view가 필요없었기 때문에 controller에서만 처리하면 된다. 나머지 db에서 데이터 받아오기 위한 service, dao는 그냥 spring 이랑 똑같다. 대신 mapper는 사용 안할래... 진짜 매퍼 설정하는거 극혐임
@RestController
public class TestController {
@RequestMapping("/map")
public Map<String, String> testMap() {
Map<String, String> resData = new HashMap<String, String>();
resData.put("name", "aaaa");
resData.put("pass", "123");
return resData;
}
}
일단 이런 식으로 설정하면 /map으로 호출했을 때 웹에서 아래 결과를 볼 수 있다.
짜잔! Json 형식으로 출력! 순서 다른 건 HashMap 이어서 그렇다.
@RestController : @Controller와 @ResponseBody 어노테이션이 합쳐진 것이다. 클래스 위에 선언해주면 메서드마다 @ResponseBody를 선언해주지 않아도 된다.
메서드에 @ResponseBody가 붙어있으면 메서드에서 리턴되는 값은 view를 통해 출력되지 않고 HTTP Response Body 에 직접 쓰여 응답하게 된다.
@Controller
public class TestController {
@RequestMapping("/map")
@ResponseBody
public Map<String, String> testMap() {
Map<String, String> resData = new HashMap<String, String>();
resData.put("name", "aaaa");
resData.put("pass", "123");
return resData;
}
}
위에랑 이거랑 같은 것임.
그렇다면 Json 데이터로 들어오는 요청은 어떻게 처리할까? google에서 talend api tester 를 설치해서 다음과 같이 http 요청을 보내고 받았다.
@RestController
public class TestController {
@RequestMapping("/string")
public String testMap(@RequestBody Map<String, String> data) {
String name = data.get("name");
String pass = data.get("pass");
String resData = "{\"name2\" : \"" + name + "\", \"pass2\":\"" + pass + "\"}";
return resData;
}
}
위 처럼 보내면
이런 결과를 받을 수 있습니다! 하핳
@RequestBody 를 통해서 application/json 형태로 데이터를 받아서 활용할 수 있다.
@RequestBody 나 리턴 타입은 Map, String, JsonNode 등 편한대로 사용할 수 있다.
끝!
'프로그래밍 > Java' 카테고리의 다른 글
[java] request.getParameter 의 Content-Type (0) | 2020.03.29 |
---|---|
AOP로 세션 확인하기 - @Around 어노테이션, 메서드 리턴 값과 일치시키기 (0) | 2019.11.20 |
logback 설정하기 (properties 를 통한 외부설정) (0) | 2019.11.13 |