이전 시간까지 우리는 ViewResolver와 TilesResolver를 사용하여 문서를 출력하였다.
만약 문서가 아닌, 단순한 문자열을 사용자에게 출력하고 싶다면 우리는 다른 두 가지 방법을 사용할 수 있다.
첫 번째 방법은 서블릿 객체를 얻어서 이를 활용하는 방법이다. 사용 방법은 다음과 같다.
즉, Front Controller에서 요청에 의해 HomeController를 가져오면서, response 객체를 넘겨주게되어 HomeController의 함수 안에서 해당 객체를 사용해 문자열을 출력할 수 있는 것이다.
두 번째 방법은 스프링에서 제공하는 방법을 사용하는 것인데, 사용 방법은 다음과 같다.
@ResponseBody 어노테이션은 해당 함수가 반환하는 값은 Resolver에 의해 처리될 값이 아닌 출력할 값 그 자체라는 것을 알려주는 역할을 수행한다.
문서를 만들어서 제공해주는 것이 아닌 데이터를 제공해주는 것을 목적으로 한다면 우리는 다음과 같은 방법도 사용할 수 있다.
@RestController 어노테이션 사용하게 되면 해당 컨트롤러의 함수에서 반환하는 값은 문서를 반환하는 것이 아닌 위에서 다루었던 것처럼 해당 값 그대로를 반환하게 된다.
다만 위처럼 할 경우 중복되는 이름의 컨트롤러가 있다면 IoC 컨테이너에 담겨지는 과정에서 오류가 발생하게 된다. 이유는 우리가 따로 형태를 지정해주지 않았기 때문에 묵시적으로 객체가 생성될 때 'noticeController'라는 이름으로 객체가 생성되기 때문에 객체 이름이 중복되기 때문이다.
따라서 우리는 다음과 같이 객체 생성에 대한 형태를 따로 지정하여 오류를 피할 수 있다.
이후 실행해보면 정상적으로 실행되는 것을 확인할 수 있을 것이다.
다만 여기서 우리가 한글을 출력하고자 한다면 따로 설정해주어야 할게 있다.
servlet-context.xml 파일을 열고 <mvc:annotation-driven> 태그를 열어 다음과 같이 코드를 작성해준다.
이렇게 하면 @RequestMapping으로 처리된 결과물이 @ResponseBody 형식으로써 문자열로 반환되었다면 이를 변환해주는 기능을 수행한다.
이것 말고도 다른 변환을 필요로 한다면 더 추가할 수도 있다.
이번에는 객체를 반환해보자. 이말은 즉슨 서버 쪽에서 객체를 반환하면 클라이언트에서 그 객체의 값을 받을 수 있게 하겠다는 것이다. 이것이 어떻게 가능한 것일까? 바로 문자열로 반환하는 것이다.
따라서 우리는 JSON 객체를 반환하게 될 텐데 방법은 굉장히 간단하다.
우선 라이브러리를 추가하기 위해 pom.xml 파일을 열고 다음과 같이 코드를 추가한다.
이후 컨트롤러를 다음과 같이 구현해주고 해당 url을 통해 페이지를 실행시키면 JSON 형식으로 데이터가 출력되는 것을 확인할 수 있다.
위처럼 동작하는 이유는 <annotation-driven> 태그에 JSON 변환 컨버터가 내장되어 있기 때문이다.
'🍃 Spring, Spring Boot > 스프링 프레임워크 기초' 카테고리의 다른 글
[Java / Spring] 21. QueryString 입력(@RequestParam) (0) | 2022.04.26 |
---|---|
[Java / Spring] 19. Root / HomeController (0) | 2022.04.25 |
[Java / Spring] 18. Annotation 활용하기 (0) | 2022.04.23 |
[Java / Spring] 17. 스프링 설정파일(dispatcher-servlet.xml) 분리하기 (0) | 2022.04.23 |
[Java / Spring] 16. 데이터 서비스 클래스 준비 및 객체 사용하기 (0) | 2022.04.23 |