본문 바로가기
Backend/Spring

Spring : @Controller 활용하여 다양한 컬렉션 데이터 반환하기

by 코딩쥐 2024. 10. 26.

@Controller를 활용하여 다양한 컬렉션(List, Set, Map) 데이터를 반환하게 되면 클라이언트와 서버 간의 데이터를 효과적으로 전달할 수 있다. 컬렉션을 통해서 여러 개의 데이터 항목을 한 번의 요청으로 전달 할 수 있으며, 복잡한 데이터를 구조화하여 표현할 수 있다. 

// 컨트롤러 역할을 한다고 선언
@Controller
public class CollectionController {
    // 특정 URL과 HTTP 메서드(GET)에 대한 요청을 처리하도록 매핑
    @RequestMapping(value="/URL", method = RequestMethod.GET)
    // 반환 값이 HTTP 응답 본문에 포함되도록 함
    @ResponseBody
    public ResponseEntity<제네릭타입<요소타입>> 메서드명() {
        // 제네릭 타입 변수 선언 및 초기화
        제네릭타입<요소타입> 제네릭변수명 = new 인스턴스<>();
        제네릭변수명.add("안녕");
        
        // HttpHeaders 객체 생성 및 헤더 설정
        HttpHeaders 헤더명 = new HttpHeaders();
        헤더명.add("Content-Type", "application/json");
        
        // ResponseEntity 객체 생성, 헤더 포함
        ResponseEntity<제네릭타입<String>> 엔티티변수명 = new ResponseEntity<>(제네릭변수명, 헤더명, HttpStatus.OK);

        // ResponseEntity 반환
        return 엔티티변수명; 
    }
}

 

ResponseEntity

ResponseEntity는 HTTP 응답을 구성하는데 사용되는 클래스이다. 응답 본문에 JSON, XML 또는 다른 형식의 데이터를 포함시켜 필요한 데이터를 전달할 수 있으며, 헤더를 추가하여 메타데이터를 포함할 수 있다. 또한 HTTP 상태 코드를 설정할 수 있다(OK, BAD_REQUEST, ACCEPTED, FOUND, OTHR 등).

 


List 데이터 반환

list는 데이터 중복을 허용하는 순서가 있는 데이터의 집합이다. 아래의 코드는 Spring MVC에서 List 데이터를 반환하는 방법이다. 

package com.example.project2.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;

@Controller
public class CollectionController {
    @RequestMapping(value="/list", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<String>> listFunc(){
        // String 타입의 요소를 가지고 있는 List 생성
        List<String> list = new ArrayList<>();
        // List 객체에 요소 추가
        list.add("안녕");
        list.add("Hola");
        list.add("Hello");
        list.add("Chao");

        // 헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        headers.add("Accept-Charset", "UTF-8");

        // ResponseEntity 객체 생성
        ResponseEntity<List<String>> entity = new ResponseEntity<>(list, headers, HttpStatus.OK);

        return entity;
    }
}

 

위의 코드에서 '/list' 경로로 GET 요청을 보내면, 설정된 List 데이터가 JSON 형식으로 반환된다. 헤더에는 Content-Type과 Accept-Charset을 설정하여 응답의 형식과 인코딩 방식을 지정했다. 

 

 

 

Set 데이터 반환

데이터의 중복을 허용하지 않는 순서가 없는 데이터의 집합이다. 아래의 코드는 아래의 코드는 Spring MVC에서 Set 데이터를 반환하는 방법이다. 

package com.example.project2.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashSet;
import java.util.Set;

@Controller
public class CollectionController {
    @RequestMapping(value="/set", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<Set<String>> setFunc(){
        //String 요소를 가지고 있는 Set 생성
        Set<String> set = new HashSet<>();
        //Set 객체에 요소 추가
        set.add("사과");
        set.add("포도");
        set.add("파인애플");

        //헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-type", "application/json");
        headers.add("Accept-Charset", "UTF-8");

        //ResponseEntity 객체 생성
        ResponseEntity<Set<String>> entity = new ResponseEntity<>(set, headers, HttpStatus.OK);

        return entity;
    }
}

 

위의 코드에서 '/set' 경로로 GET 요청을 보내면, 설정된 Set 데이터가 JSON 형식으로 반환된다. 헤더에는 Content-Type과 Accept-Charset을 설정하여 응답의 형식과 인코딩 방식을 지정했다. 

 

Set은 데이터의 중복을 허용하지 않으며, 정렬 순서를 보장하지 않기 때문에 특정 순서가 필요하지 않은 데이터 집합을 처리할 때 유용하다. 하지만 일반적으로 데이터의 순서가 중요할 경우 List를 더 많이 사용한다. 

 

Map 데이터 반환

Map은 키-값 쌍으로 데이터를 저장하며, 키 값은 중복을 허용하지 않고 값은 중복이 되어도 상관이 없는 데이터의 집합이다.

package com.example.project2.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

@Controller
public class CollectionController {
    @RequestMapping(value = "/map", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<Map<Integer, String>> mapFunc(){
        // 키는 Integer, 값은 String을 가지고 있는 Map 생성
        Map<Integer, String> map = new HashMap<>();
        // Map 객체에 요소 추가
        map.put(1,"안녕");
        map.put(2, "Hello");
        map.put(3, "Hola");

        //헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-type", "application/json");
        headers.add("Accept-Charset", "UTF-8");

        //ResponseEntity 객체 생성
        ResponseEntity<Map<Integer, String>> entity = new ResponseEntity<>(map, headers, HttpStatus.OK);

        return entity;
    }
}

 

위의 코드에서 '/map' 경로로 GET 요청을 보내면, 설정된 Map 데이터가 JSON 형식으로 반환된다. 헤더에는 Content-Type과 Accept-Charset을 설정하여 응답의 형식과 인코딩 방식을 지정했다.