본문 바로가기
Server/Spring

JSON 데이터를 직접 반환하여, 템플릿을 거치지 않고 API 응답을 처리하기(API 활용하여 개체 JSON으로 반환하기)

by print_soo 2024. 8. 24.

(파일 경로: src/main/java/hello_spring/controller/HelloController)

 

특정 경로로 전달된 특정 매개변수 값을 받아 JSON으로 반환하기

@GetMapping("hello-api")
@ResponseBody
public Hello helloString(@RequestParam("name") String name){
    Hello hello = new Hello();
    hello.setName(name);
    return hello; //객체 반환
}

static class Hello {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

 

해당 코드를 한 문자으로 설명하면 아래와 같다.

"hello-api경로로 전달된 name 매개변수 값으로 Hello 객체에 설정한 후 JSON형식으로 반환하는 코드"

 

 

이전 글로 우리는 저 코드가 대충 어떤 코드인지 알고 있다. 그렇기 때문에 중복 설명을 하지 않고 새로운 코드만 해석해보자.

 

@ResponseBody

-> 메서드의 반환 값을 HTML 같은 페이지로 변환하여 표현하는 과정을 거치지 않고, 서버가 클라이언트에게 보내는 실제 내용에 직접 작성하라는 의미이다. 주로, JSON이나 문자열 데이터를 클라이언트에게 직접 반환할 떄 사용된다. 

 

public Hello helloString(@RequestParam("name") String name){
    Hello hello = new Hello();
    hello.setName(name);
    return hello; //객체 반환
}

-> URL 요청에서 name이라는 매개변수를 받아서 name 변수에 저장한 후 hello객체의 setName 메소드를 통해 name을 전달한다. 그리고 hello 객체를 반환한다.

 

static class Hello {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

-> Hello라는 클래스를 정의하는 코드이다. getName 메소드는 name 변수를 반환하는 메서드이다. setName은 전달 받은 name의 값을 클래스 name 변수에 저장하는 변수이다. 

 

위의 setName을 통해 Hello 클래스의 객체인 hello 인스턴스 변수에 저장하는 것이다.

 

 

위의 코드를 실행하고 http://localhost:8080/hello-api?name=spring 경로를 실행하면 아래와 같은 JSON 화면이 뜬다.