본문 바로가기
스프링

[Spring] @ResponseBody

by 리포터12 2022. 12. 8.
728x90

@ResponseBody

스프링 어노테이션

 

HTTP에는 header 와 body 가 있음. (HTML <body> 아님)

 

// HTTP? header 와 body 란?

- 내용 추가 예정 (링크 형태로)

 

@ResponseBody 가 붙은 메서드의 return 값을

HTTP의 body 에 직접 넣겠다는 의미임.

 

이를 통해 반환된 페이지는

html 태그고 뭐고 아무것도 없이 그냥 진짜 return 값만 반환됨.

 

    @ResponseBody
    @GetMapping("hello-string")
    public String helloString(@RequestParam("name") String name){
        return "hello" + name;
    }

진짜 리턴값만 반환됨 ㅋㅋㅋ

 

그럼 그냥 문자열 말고...

데이터를 반환해야 한다면?

 

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@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;
    }

 static class Hello 를 만들어 

public Hello helloApi() 메서드에서 객체를 생성하고,

 Hello 클래스의 인스턴스(객체)인 hello 를 반환 했더니!!!!

짠! JSON 으로 반환 됐다.

?????????????????????

왜 JSON 형식으로 반환 됐지???????????

 

@ResponsBody 를 사용하면

HTTP 의 BODY 에 메서드의 리턴값을 직접 반환한다.

@ResponsBody 가 없다면 ViewResolver 가 동작하고,

@ResponsBody 가 있다면 ViewResolver 대신 HttpMessageConverter 가 동작한다.

 

HttpMessageConverter 은 

반환 값이 문자라면 StringHttpMessageConverter 가 실행되고

반환 값이 객체라면 MappingJackson2HttpMessageConverter 가 실행된다.

문자, 객체 외에 다양한 HttpMessageConverter 가 기본적으로 등록되어 있다.

 

 

참고자료

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 <김영한>

728x90

'스프링' 카테고리의 다른 글

@ResponseBody  (0) 2022.12.19
[Spring] JPA Auditing  (0) 2022.12.18
[Spring] 인증과 인가  (0) 2022.12.17
애노테이션 몇 개  (0) 2022.12.16
[Spring] Cause: error: invalid source release: 17  (0) 2022.12.07

댓글