컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 viewResolver가 화면을 찾아서 처리를 한다.
//testController
@Controller
public class HelloworldController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String hello(Model model) {
model.addAttribute("hello", "서버에서 보내준 값입니다");
return "/hello";
}
//hello.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hello.html입니다</h1>
<p>viewResolver가 hello.html을 찾아서 반환</p>
</body>
</html>
controller에서 /매핑을 받아 return값으로 /hello 문자를 반환을 하면 viewResolver가 /hello 화면을 찾아서 처리를 하게 되는데 Controller에서 값을 받고 처리를 할 때 값을 넘겨줘야 하는 상황이 있다. 이때 @ResponsBody를 사용하면 쉽게 처리가 가능하다.
@ResponsBody를 사용하면 뷰 리졸버를 사용하지 않고 HTTP의 BODY에 문자 내용을 직접 반환한다.
- @ResponseBody 를 사용 HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
@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;
}
}
뷰 리졸버를 사용한 코드와 달리 return값이 객체이다.
주소에 name= json형식!! 을 넣어주었으며 화면에는 json 형식으로 출력이 됨을 확인할 수 있다.
따라서 Controller가 매핑을 받아 동작할 때 @ResponsBody 어노테이션이 있으면 뷰 리졸버가 아닌 HttpMessageConverter가 처리를 하게 된다.
출처 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
'Programming > Back-end Language' 카테고리의 다른 글
[Spring] DI 의존성 주입이란 ? (0) | 2022.04.13 |
---|---|
[JAVA] AOP란 무엇일까? (0) | 2022.03.28 |
[Spring]Failed to load resource: the server responded with a status of 404 () 오류 해결 방법 (0) | 2022.03.24 |
[개발환경] Spring boot+React 연동하기 (0) | 2022.03.23 |
[Spring] The import org.springframework.boot.test cannot be resolved 해결 방법 (0) | 2022.02.21 |