@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을 설정하여 응답의 형식과 인코딩 방식을 지정했다.
'Backend > Spring' 카테고리의 다른 글
Spring : 파라미터를 처리하는 방법 ( @PathVariable, @RequestParam, @RequestMapping ) (0) | 2024.10.27 |
---|---|
Spring : Record 클래스 사용하기 (0) | 2024.10.27 |
Spring : Lombok(롬복)에 대해 알아보자 (0) | 2024.10.27 |
Spring : DTO(Data Transfer Object)에 대해서 (0) | 2024.10.27 |
Spring : @Controller와 @RestController 어노테이션에 대해서 (1) | 2024.10.26 |
Spring : @Autowired 어노테이션에 대해서 (0) | 2024.10.26 |
Spring : @Component 어노테이션에 대해서 (0) | 2024.10.24 |
Spring : Spring의 기초에 대해서 (0) | 2024.10.23 |