스프링부트에서 JsonView 사용법

2021. 6. 27. 13:06Dev/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 어노테이션을 이용해도 문자열 형태의 데이터를 내려줄 수 있다.

 

다양한 방법으로 데이터를 내려주는 방법에 대해 연습해보면 좋을 것 같다.

반응형