html/css/js(뷰)를 반환하던 시기가 지나고, JSON 형태의 데이터를 반환하는게 요즘
JSON은 JS 형식이기 때문에 String 타입으로 변환해서 사용해야한다. 이를 위해선 @ResponseBody를 사용하면 된다.
return "{\"name\":\"Robbie\",\"age\":95}";
return new Star("Robbie", 95);
이 방법은 Spring에서 Java의 객체를 JASON으로 변환해주기 때문에 가능하다.
뷰를 반환하기 위해서 @Controller 어노테이션을 사용하고, @ResponseBody를 이용해 String을 반환했는데, 뷰를 반환하지 않는다면 Controller에 ResponseBody가 결합된 @RestController를 사용하면 된다.
이를 사용하면 @ResponseBody를 사용하지 않고 String형을 반환할 수 있게 된다.
Jackson은 JSON 구조를 처리해주는 라이브러리다.
Object를 JSON 형태의 String으로 변환해 줄 수 있으며, 반대로 JSON 형태의 String을 Object로 변환해줄 수 있다.
Spring 3.0 이후로 Jackson 관련 API가 내장되어서 그냥 사용하면 된다.
Star star = new Star("Robbie", 95);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(star);
System.out.println("json = " + json);
변환 객체 objectMapper를 이용해서 객체인 star을 JSON으로 변화시키는 모습이다.
사용되는 Method는 writeValueAsString()
이때, 해당 object 즉, star에 get Method가 필요한데 @getter를 써놨으면 상관없다.
String json = "{\"name\":\"Robbie\",\"age\":95}";
ObjectMapper objectMapper = new ObjectMapper();
Star star = objectMapper.readValue(json, Star.class);
System.out.println("star.getName() = " + star.getName());
변환 객체 objectMapper를 이용해서 JSON String을 객체인 star로 변화시키는 모습이다.
사용되는 Method는 readValue()인데, 첫 파라미터는 Json, 두번째는 변화 대상 object의 clss타입을 사용한다.
이때, 해당 object 즉, star에 기본 생성자와 get 혹은 set이 필요한데 어노테이션을 입력했으면 상관없다.