Spring 입문
<Spring 입문> 3.3 스프링 웹 개발 기초_API
Isaac01
2025. 4. 17. 12:32
반응형
경로: src > main > java > ... > controller > HelloController
@Controller
public class HelloController {
// 문자가 반환 될 경우
@GetMapping("hello-string")
@ResponseBody
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;
}
}
경로: src > main > resources > templates > hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
@ResponseBody를 사용
@ResponseBody는 컨트롤러 메서드의 반환값을 "화면(html)"이 아닌 "데이터 자체로" 클라이언트에게 전달하라는 뜻
예시 1: 일반 컨트롤러 (뷰 반환)
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello"; // hello.html이라는 뷰 템플릿을 찾아서 응답
}
}
예시 2: @ResponseBody 사용, 문자 반환
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/hello-string")
public String helloString() {
return "hello world"; // "hello world"라는 텍스트 자체가 브라우저에 응답됨
}
}
예시 3: @ResponseBody 사용, 객체 반환 → JSON 응답
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/hello-api")
public Hello helloApi() {
Hello hello = new Hello();
hello.setName("자바");
return hello; // {"name":"자바"} 라는 JSON 데이터로 응답됨
}
static class Hello {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
}
@ResposeBody를 사용함으로써 ViewResolver 대신에 HttpMessageConverter가 동작
- HttpMessageConverter는 기본 문자를 처리하는 StringConverter과 기본 객체를 처리하는 JsonConverter가 있다.
- StringConverter가 사용되면 문자를 HTTP 응답 본문에 포함
- JsonConverter 가 사용되면 객체를 HTTP 응답 본문에 포함