Everyday Dev System

Spring Boot Controller REST API 기초 실습 본문

내배캠 주요 학습/Spring 입문

Spring Boot Controller REST API 기초 실습

chaeyoung- 2023. 6. 13. 10:39

 

1. @ResponseBody를 기재시에는 String 타입으로 반환,

미 기재 시에는 [resources] - [templates] 안에서 Hello World.html파일을 찾음.

package com.sparta.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @GetMapping("/api/hello")
    @ResponseBody
    public String hello() {
        return "Hello World";
    }
}

 

 

2. postman 실행해서 요청 보내기

 

 

3. get , post , put , delete 메서드 모두 활용하기

package com.sparta.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/api")
public class HelloController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello World!!";
        // @ResponseBody를 안 달아주면 resources-templates 안에 해당 html파일을 찾음.
    }

    @GetMapping("/get")
    @ResponseBody
    public String get() {
        return "GET Method 요청";
    }

    @PostMapping("/post")
    @ResponseBody
    public String post() {
        return "POST Method 요청";
    }

    @PutMapping("/put")
    @ResponseBody
    public String put() {
        return "PUT Method 요청";
    }

    @DeleteMapping("/delete")
    @ResponseBody
    public String delete() {
        return "DELETE Method 요청";
    }

}

 

4. 정적인 페이지 & 동적인 페이지

정적인 페이지는 http://localhost:8081/hello.html 로 접근
위와 같은 직접 접근이 아닌,
Controller 통해서도 접근 가능하지만, 동적인 페이지가 아니므로 의미가 없다.

Thymleaf 의존성을 추가하면 Controller에서 html을 찾을때 templates 폴더에서만 찾는다.
-> 동적인 HTML파일을 만들기 위해 추가한 라이브러리 이므로

 

 

<<정적인 페이지를 Controller를 통한 접근 방법>>

 

1) Thymleaf 의존성 제거

- build.gradle에서 주석 처리 한 후, 다시 gradle을 build 

dependencies {
//    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

2) Thymleaf 주석 처리 하지 않고, redirect:/hello.html 로 가능. 

여기서 주의할 점은, [templates] 내에 있는 html을 찾을때는 ".html" 확장자는 미기재

package com.sparta.springmvc.html;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HtmlController {

    @GetMapping("/static-hello")
    public String hello() {
        return "hello.html";
    }

    @GetMapping("/redirect")
    public String htmlStatic() {
        return "redirect:/hello.html";
    }

    @GetMapping("/html/templates")
    public String htmlTemplates() {
        return "hello";
    }
}

 

 

1. Model.addAttribute()

 

코드 전체 보기 

더보기

templates/hello-visit.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Hello Spring</title></head>
<body>
<div>
  Hello, Spring 동적 웹 페이지!!
</div>
<div>
  (방문자 수: <span th:text="${visits}"></span>)
</div>
</body>
</html>

 

Controller.java

package com.sparta.springmvc.html;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HtmlController {

    private static long visitCount = 0;

    @GetMapping("/html/dynamic")
    public String htmlDynamic(Model model) {
        visitCount++;
        model.addAttribute("visits",visitCount);
        return "hello-visit";
    }
}

 

1) Controller 클래스 내에 메소드에서 아래 코드를 입력

model.addAttribute("visits",visitCount);

 

2) html 파일에서 아래 코드를 통해 접근 가능.

<div>
  (방문자 수: <span th:text="${visits}"></span>)
</div>