
클라이언트 측에서 GET 요청을 한다. 이 요청은 톰캣을 거쳐 스프링 부트 애플리케이션으로 전달된다.
이때, 스프링 부트의 디스패처 서블릿 DispatcherServlet 이 요청을 받아 이를 처리할 컨트롤러와 해당 메서드를 찾는다.
응답은 JSON, XML 등 데이터 포맷인 경우, 메시지 컨버터가 작동한다.
HTML 등 뷰 템플릿이 필요한 경우, 뷰 리졸버 View Resolver 가 템플릿 엔진을 통해 HTML 문서를 생성, 클라이언트에게 반환한다.
@Controller
public class GetApiController {
🤔뭐가 다른가?
@Controller 스프링프레임워크 안에 '뷰리졸브'가 해당 경로의 파일을 찾아 반환한다.
@ResponseBody 데이터를 반환하도록 하는 역할 (메서드 앞에 어노테이션으로 표시)
@RestController 둘을 합친 것
GET 방식으로 요청을 하면 처리하는 메서드를 만들어 두어야 한다.
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "index";
}
http://localhost:8080/qs1?name=둘리
@GetMapping("/qs1")
public String qs1(@RequestParam(name = "name") String name) {
return "응답받은 name키값의 값은 = " + name;
}
http://localhost:8080/qs2?name=둘리&age=10
기본값이 "0" 처럼 문자열로 표시해도 내부에서 버퍼드리더가 문자열을 읽어 파싱해준다.
@GetMapping("qs2")
public String qs2(@RequestParam(name = "name") String name,
@RequestParam(name = "age",
required = false, defaultValue = "0") int age) {
System.out.println("name : " + name);
System.out.println("age : " + age);
return "name="+name+"&age="+age;
}
http://localhost:8080/qs3?name=둘리&age=10&groupId=com.tenco
@GetMapping("/qs3")
public String qs3(@RequestParam(name = "name")String name,
@RequestParam(name = "age")Integer age,
@RequestParam(name = "groupId")String groupId) {
System.out.println("name:"+name);
System.out.println("age:"+age);
System.out.println("groupId:"+groupId);
return "name:"+name + "&age:"+age +"&groupId:"+groupId;
}
http://localhost:8080/qs4
new User 객체를 문자열로 변환 시키기 위해서 반드시 @Getter 가 있어야 한다.
Object (서버 측) 응답시킬 때 잭슨이나 Gson이 필요한데 내부에서 MappingJackson2HttpMessageConverter 동작하고 있다.
@GetMapping("/qs4")
@ResponseBody
public User helloObject() {
return new User("마이콜", 20);
}
// 내부 클래스
@AllArgsConstructor
@Getter
class User {
private String name;
private Integer age;
}
http://localhost:8080/qs5?a=둘리&b=10&c=com.tenco
Map 방식으로 동적으로 들어오는 키와값을 받아서 처리해 보자.
@GetMapping("/qs5")
@ResponseBody
public String qs5(@RequestParam Map<String, String> data) {
StringBuffer sb = new StringBuffer();
data.entrySet().forEach(entry -> {
System.out.println(entry.getKey() + " = " + entry.getValue());
sb.append(entry.getKey()+"="+entry.getValue()+"\n");
});
return sb.toString();
}