Free Lines Arrow
본문 바로가기
Spring/spring mvc 1 스터디

[Spring] HTTP 응답

by skahn1215 2021. 11. 21.
728x90
반응형

HTTP 응답

응답을 어떻게 다뤄야 하는지 알아보자.

 

 

응답데이터를 만드는 방법

정적리소스

  • 웹브라우저에 정적인 HTML, CSS, js 를 제공할때 정적 리소스를 사용한다.
  • src/main/resources/static/basic/hello-form.html
     - http://localhost:8080/basic/hello-form.html 로 실행한다.
  • 그렇게 되면 정적리소스를 보여준다.

 

뷰 템플릿 사용

  • 웹 브라우저에 동적인 HTML을 제공할때 사용
  • 뷰템플릿을 거쳐 HTML 이 생성된다.
  • 뷰가 응답을 만들어서 전달한다.

 

뷰 템플릿 생성

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<p th:text="${data}">empty</p>
</body>
</html>

 

뷰템플릿 호출하는 방법

1. ModelAndView 를 생성해서 URL, 과 Data 를 넣는 방식으로 호출이 가능하다.

@Controller
public class ResponseVIewController {

    @RequestMapping("/response-view-v1")
    public ModelAndView responseView1() {
        ModelAndView mav = new ModelAndView("response/hello")
                .addObject("data","hello!");

        return mav;
    }
}

 

2. 간편하게 Model 을 파라미터로 생성하여 쉽게 넣어줄수 있다.

@Controller
public class ResponseVIewController {

    @RequestMapping("/response-view-v2")
    public String responseView2(Model model) {
        model.addAttribute("data", "Hello!!");
        return "response/hello";
    }

}

 

3. 이방법은 권장하지 않는다.

  • return type void 인데 그이유는 RequestMapping 안에 html 과 동일한 url 을 넣어주었기 때문이다.
  • 요청한 URL 을 참고해서 논리 뷰 이름으로 사용한다.
@Controller
public class ResponseVIewController {
    // 권장하지 않는다. 완전 별로다.
    @RequestMapping("/response/hello")
    public void responseView3(Model model) {
        model.addAttribute("data", "Hello!!");
    }

}

 

HTTP 메시지 사용

  • HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 한다.
     - 바디에 JSON 같은 형식으로 데이터를 담아 보낸다.
  • 참고사항 RestController 는 ResponseBody+Controller 이다.

 

Writer 활용

  • HttpServletResponse 객체에서 writer 을 사용하여  body 에 데이터를 넣는다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
    // Writer 를 가져와 Body에 직접 넣어준다.
    @GetMapping("/response-body-string-v1")
    public void responseBodyStringV1(HttpServletResponse res) throws IOException {
        res.getWriter().write("OK");
    }
}

 

ResponseEntity 활용1

  • ResponseEntity 를 사용하면 상태코드도 같이 넘길수 있다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
    // ResponseEntity 로 상태코드도 같이 넘길수 있다.
    @GetMapping("/response-body-string-v2")
    public ResponseEntity<String> responseBodyStringV2(HttpServletResponse res) {
        return new ResponseEntity<String>("OK", HttpStatus.OK);
    

}

 

 

ResponseEntity 활용2

  • 객체를 직접 담을 수 있다. 그렇게 되면 컨버터가 바디에 JSON 형태로 데이터를 담는다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
    @GetMapping("/response-body-json-v2")
    public ResponseEntity<HelloData> responseBodyJsonV2(HttpServletResponse res) {
        HelloData data = new HelloData();
        data.setUsername("skahn");
        data.setAge(19);

        return new ResponseEntity<HelloData>(data,HttpStatus.OK);
    }
}

 

 

ResponseBody 활용3

  • ResponseBody  를 사용하는 경우에는 메소드 레벨에서 상태 코드를 넣을수 없다.
  • @ResponseStatus 로 상태코드를 같이 넘길수 있다.
@Slf4j
//@Controller
//@ResponseBody
@RestController //@ResponseBody + @Controller
public class ResponseBodyController {
    // API 를 만들때 가장 많이 쓰는 스타일이다.
    // ResponseBody 를 사용할 경우 아래와같이 상태값을 넘길수 있다.
    @ResponseStatus(HttpStatus.OK)
    //@ResponseBody
    @GetMapping("/response-body-json-v3")
    public HelloData responseBodyJsonV3(HttpServletResponse res) {
        HelloData data = new HelloData();
        data.setUsername("skahn");
        data.setAge(19);

        return data;
    }
}

 

 

 

참고

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/lecture/71224?tab=curriculum 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

728x90
반응형

'Spring > spring mvc 1 스터디' 카테고리의 다른 글

[Spring] @ModelAttribute 사용하기  (0) 2021.11.27
[Spring] Message Converter  (0) 2021.11.25
[Spring] HTTP 요청메세지 TEXT, JSON  (0) 2021.11.16
[Spring] HTTP 요청파라미터  (0) 2021.11.13
[Spring] 요청매핑  (0) 2021.11.10

댓글