2021. 6. 27. 13:06ㆍDev/SpringBoot
스프링에서 Controller 클래스는 @Controller 어노테이션을 붙여서 사용한다.
요즘은 스프링4에서 추가된 @RestController 어노테이션을 이용하여 별도의 설정없이도 클라이언트에 반환되는 데이터를 json 형태로 내려줄 수 있지만, @Controller 어노테이션을 사용하면 기본적으로 view이름(페이지명)을 리턴하므로 문자열 형태의 데이터를 반환하기 위해 사용되는 것 중 하나가 JsonView이다.
바로 알아보자.
build.gradle 파일
plugins {
id 'org.springframework.boot' version '2.5.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
Configuration 설정
package com.example.demo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
@Configuration
public class DemoConfiguration {
//jsonView 빈네임 설정을 통해, jsonView가 리턴될 때, JSON형태의 데이터로 매핑
@Bean(name="jsonView")
public MappingJackson2JsonView jsonView() {
return new MappingJackson2JsonView();
}
}
Controller 샘플코드
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/api")
public class ApiController {
//ModelMap을 이용한 샘플코드
@GetMapping(value = "/hello")
public String hello(ModelMap model){
model.addAttribute("text", "hello ModelMap");
return "jsonView";
}
//Model을 이용한 샘플코드
@GetMapping(value = "/hello2")
public String hello2(Model model){
model.addAttribute("text", "hello Model");
return "jsonView";
}
//ModelAndView를 이용한 샘플코드
@GetMapping(value = "/hello3")
public ModelAndView hello3(){
ModelAndView model = new ModelAndView();
model.setViewName("jsonView"); //jsonView로 이름을 설정
model.addObject("text", "hello ModelAndView");
return model;
}
//@responseBody 어노테이션을 이용한 샘플코드
@GetMapping(value = "/hello4")
@ResponseBody
public ModelMap hello4(){
ModelMap model = new ModelMap();
model.addAttribute("text", "hello responsebody");
return model;
}
//@responseBody 어노테이션과 Map을 이용한 샘플코드
@GetMapping(value = "/hello5")
@ResponseBody
public Map hello5(){
Map<String, String> map = new HashMap<String, String>();
map.put("text", "hello Map");
return map;
}
}
Model은 인터페이스이고, ModelMap은 클래스라는 차이 외에는 둘 다 데이터를 담을 때 사용하는 것을 동일하다.
개발자 취향에 따라 사용하면 될 것 같다.
ModelAndView는 데이터와 View를 함께 담을 수 있기 때문에, 아래와 같이 사용하면 된다.
---
ModelAndView model = new ModelAndView("jsonView"); //객체 생성과 동시에 view네임 설정
---
ModelAndView model = new ModelAndView();
model.setViewName("jsonView"); //객체 생성 후 jsonView로 view네임 설정
굳이 JsonView를 이용하지 않아도, @ResponseBody 어노테이션을 이용해도 문자열 형태의 데이터를 내려줄 수 있다.
다양한 방법으로 데이터를 내려주는 방법에 대해 연습해보면 좋을 것 같다.
'Dev > SpringBoot' 카테고리의 다른 글
SpringSecurity 사용 시, H2 console 화면 localhost에서 연결을 거부했습니다. (0) | 2024.12.31 |
---|---|
springboot H2 database 연결 오류 "mem:testdb" not found (0) | 2023.08.10 |
레거시 코드에 대한 고민 (0) | 2021.06.26 |