Spring Tips (1)

김재익·2023년 6월 23일
0

SPRING FRAMEWORK

목록 보기
1/6
post-thumbnail

@Controller, @RestController

@Controller
@RequestMapping("/response")
public class ResponseController {
    // Content-Type: text/html
    // Response Body:
    // {"name":"Bobbie", "age":95}

    @GetMapping("/json/string")
    @ResponseBody
    public String helloStringJson() {
        return "{\"name\":\"Robbie\", \"age\":95}";
    }

    // Content-Type: application/json
    // Response Body:
    // {"name":"Bobbie", "age":95}
    @GetMapping("/json/class")
    @ResponseBody
    public Star helloClassJson() {
        return new Star("Robbie", 95);
    }
}
@RestController // Controller + ResponseBody
@RequestMapping("/response/rest")
public class ResponseRestController {
    // [Response header]
    //   Content-Type: text/html
    // [Response body]
    //   {"name":"Robbie","age":95}
    @GetMapping("/json/string")
    public String helloStringJson() {
        return "{\"name\":\"Robbie\",\"age\":95}";
    }

    // [Response header]
    //   Content-Type: application/json
    // [Response body]
    //   {"name":"Robbie","age":95}
    @GetMapping("/json/class")
    public Star helloClassJson() {
        return new Star("Robbie", 95);
    }
}

RestController를 사용할 경우 반환하는 값은 자동으로 ResponseBody에 담겨서 반환된다.
요즘의 경우 데이터를 담당하는 백엔드 서버 뷰를 담당하는 프론트 서버를 나눠서 백엔드에서는 뷰에 관련된 html파일 등을 반환하지 않고 오로지 데이터만 반환해주는 서버로 활용하는게 추세라고 한다. 하여 데이터만 반환하는 컨트롤러를 개발하는 경우엔 RestController를 사용하는 것이다.

JSON 타입 자동 변환

위 코드를 보면 Star객체가 있다.

@Getter
public class Star {
    String name;
    int age;

    public Star(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Star() {}
}

특별한게 없는 그냥 자바 클래스 객체이다.
그러나 스프링에서는 이러한 클래스 객체를 반환할때 자동으로 json타입으로 바꿔서 반환해준다.

클래스 객체를 반환했지만 JSON타입으로 잘 전달된 모습

JSON 데이터를 받을 때는?

@Test
@DisplayName("Object To JSON : get Method 필요")
void test1() throws JsonProcessingException {
	Star star = new Star("Robbie", 95);

	ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
    String json = objectMapper.writeValueAsString(star);

	System.out.println("json = " + json);
}

@Test
@DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
void test2() throws JsonProcessingException {
	String json = "{\"name\":\"Robbie\",\"age\":95}"; // JSON 타입의 String

	ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper

	Star star = objectMapper.readValue(json, Star.class);
    System.out.println("star.getName() = " + star.getName());
}

ObjectMapper: 스프링에서 사용하는 Jackson이라는 변환을 도와주는 라이브러리에서 지원하는 변환클래스다.
writeValueAsString() 함수로 클래스객체를 JSON 타입으로 변환해줄 수 있고, readValue() 함수로 JSON타입의 데이터를 해당 데이터와 딱 맞게 설계된 클래스로 변환해 준다.

딱 맞는 설계라 함은 JSON 데이터의 key 값과 동일한 이름의 변수가 필요하고 Getter, 기본생성자 or Setter를 구현해 두어서 값을 입력할 수 있도록 설계한 것이다.

profile
개발자호소인

0개의 댓글