@Controller & @GetMapping

Woongbin·2022년 7월 18일
1

Java 기초

목록 보기
16/17

🙁 @Controller & @Getmap

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!");
        return "hello";
    }
}

위 코드는 localhost:8080/hello라고 url이 요청되면 실행되는 코드인데, Model이라는 객체는 Controller에서 전달된 데이터를 view에 전달 할 때 사용 된다. model의 속성에 data라는 key와 hello!라는 value를 추가한 후 templates라는 폴더의 hello라는 html파일을 실행한다.

Model addAttribute(String name(Key), Object value(Value));

😃 hello.html

<!DOCTYPE html>
<html xmlns:th = "http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Hello</title>
</head>
<body>
    <p th:text="'안녕하세요 ' + ${data}">안녕하세요. 손님</p>
</body>
</html>

여기서 data는 model에서 가져온 것으로 hello!가 들어가 실행하면 안녕하세요 hello!가 출력된다.

😐 @RequestParm

@Controller
public class HelloController {

@GetMapping("/hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }
}

위 코드는 localhost:8080/hello-mvc라는 url이 입력되면 실행되는데 @RequestParam을 이용해 사용자로 부터 입력받은 값을 model 객체에다가 저장해서 hello-template라는 html에 보내고 실행시킨다.

@RequestParm(데이터이름) 자료형 변수명

😃 hello-template.html

<html xmlns:th="http://www.thymeleaf.org/%22%3E">
<body>
	<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

여기서 name은 사용자로 부터 밭은 데이터를 넣어서 사용자가 localhost:8080/hello-mvc뒤에 ?name=spring을 입력하면 화면에 hello spring이 출력된다.

😑 @ResponseBody

@Controller
public class HelloController {

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

위 코드는 localhost:8080/hello-string이라는 url이 입력되면 실행되는 코드인데, http 요청의 내용을 통째로 자바 객체로 변환하기 위해 @ResponseBody를 추가했다. 따라서 html에 파일 없이 사용자가 입력한 값을 name에 저장하고 hello 입력한값을 출력한다.

🤩 @ResponseBody & class

@Controller
public class HelloController {

    @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;
        }
    }
}

위 코드는 클래스를 만들어서 private으로 name이라는 변수를 만들었는데 private은 외부접근을 막는 접근제어자이기 때문에 이를 해결하기 위해 getter, setter을 써서 외부접근을 허용한다.
setName 메소드는 매개변수로 name을 받아 private 변수인 name을 초기화해준다. getName 메소드는 초기화한 name변수를 출력해준다.

0개의 댓글