스프링부트 HTTP 응답

최주영·2024년 2월 7일
0

✅ 정적 리소스
src/main/resources -> 리소스를 보관하는 곳, 클래스 패스의 시작 경로
다음 디렉토리에 리소스를 넣어두면 스프링부트가 정적 리소스로 서비스를 제공

  • 스프링부트의 정적 리소스 경로 -> src/main/resources/static
    다음 경로로 파일이 들어오면 ex) src/main/resources/static/basic/hello.form.html
    웹 브라우저에서는 다음과 같이 실행하면 됨 ex) http://loaclhost:8080/basic/hello-form.html

✅ 뷰 템플릿

  • 일반적으로 HTML을 동적으로 생성하는 용도로 사용됨

  • 스프링 부트의 뷰 템플릿 경로 -> src/main/resources/templates
    위 경로에서 하위에다 패키지 or html 파일을 만들면 됨

  • @ResponseBody 있으면
    뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 응답하여 데이터 출력

  • @ResponseBody 없으면
    뷰 리졸버가 해당 매핑 주소를 찾고 렌더링 한다

@Controller
public class ResponseViewController {

    @RequestMapping("/response-view-v1") // @ResponseBody 가 없으므로 뷰 리졸버가 해당 "resonse/hello"를 찾고 렌더링 한다
    public ModelAndView responseViewV1(){
        ModelAndView mav = new ModelAndView("response/hello").addObject("data","hello!");
        return mav; // ModelAndView 객체에 뷰와 데이터 둘다 저장해서 이 객체 자체를 리턴
    }

    @RequestMapping("/response-view-v2")
    public String responseViewV2(Model model){  // Model 객체를 이용해서 데이터를 넣고 뷰는 문자열로 반환
        model.addAttribute("data","hello!");
        return "response/hello";
    }
}


✅ HTTP API, 메시지 바디에 직접 입력
@RestController = Controller + ResponseBody
-> 컨트롤러에 모두 @ResponseBody 효과가 적용됨
-> 뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 데이터를 입력한다
-> Rest API (HTTP API)를 만들 때 사용하는 컨트롤러임

@Slf4j
@Controller
public class ResponseBodyController {
    @GetMapping("/response-body-string-v1") // HttpServlet 객체를 사용하여 문자열 형태(바디메시지)로 반환하는 방법
    public void responseBodyV1(HttpServletResponse response) throws IOException{
        response.getWriter().write("ok");
    }

    @GetMapping("/response-body-string-v2") // ResponseEntity 객체를 사용하여 문자열 형태(바디메시지)로 반환하는 방법
    public ResponseEntity<String> responseBodyV2() {
        return new ResponseEntity<>("OK", HttpStatus.OK);
    }

    @ResponseBody
    @GetMapping("/response-body-string-v3") // ResponseBody 어노테이션을 사용해서 문자열 형태(바디메시지)로 반환하는 방법
    public String responseBodyV3() {
        return "ok";
    }

    @GetMapping("/response-body-json-v1") // ResponseEntity 객체로 json형태로 반환하는 방법
    public ResponseEntity<HelloData> responseBodyJsonV1(){
        HelloData helloData = new HelloData();
        helloData.setUsername("userA");
        helloData.setAge(20);
        return new ResponseEntity<>(helloData,HttpStatus.OK);
    }

    @ResponseStatus(HttpStatus.OK)  // Http 상태코드 정하기
    @ResponseBody
    @GetMapping("/response-body-json-v2") // ResponseBody 어노테이션을 사용하여 json형태로 반환하는 방법
    public HelloData responseBodyJsonV2(){
        HelloData helloData = new HelloData();
        helloData.setUsername("userA");
        helloData.setAge(20);
        return helloData;
    }
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글