목차
1. 개요
코드 작업 중에 MultiValueMap 이라는 인터페이스를 알게되었습니다. MultiValueMap 은 URLScheme을 생성할 때 url 파라미터를 셋팅 할 때 사용하였습니다.
<예시 코드>
public String generateTaskViewAppScheme(String domainId, String projectId, String taskId) {
LinkedMultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("domainId", domainId);
params.add("projectId", projectId);
params.add("taskId", taskId);
params.add("version", "18");
String appUrl = UriComponentsBuilder.newInstance()
.scheme(ONEAPP_URL_SCHEMA)
.host("task")
.path("view")
.queryParams(params)
.build(true)
.toUriString();
return appUrl;
}
2. MultiValueMap 이란?
MultiValueMap 인터페이스는 자바 api 문서에는 없고 스프링 api 문서에서 찾을 수 있습니다. 즉 자바 내장 인터페이스가 아닌 스프링에서 제공하는 인터페이스입니다.
→ 스프링 공식문서
Extension of the Map interface that stores multiple values. ( Spring api )
-> 여러 값을 저장하는 맵 인터페이스의 확장
그렇다면 단순 Map 과 어떤 차이가 있을까요?
3. Map vs MultiValueMap
<예시 코드>
Map<String, Integer> basicMap = new HashMap<>();
basicMap.put("test",1);
basicMap.put("test",2);
System.out.println(basicMap); // test=2
MultiValueMap<String,Integer> multiValueMap = new LinkedMultiValueMap<>();
multiValueMap.add("test",1);
multiValueMap.add("test",2);
System.out.println("multiValueMap = " + multiValueMap); // test=[1, 2]
공식 문서를 살펴보면 MultiValueMap이 Map 인터페이스를 상속할 때 Value 값을 List로 감싼채로 상속받는 것을 알 수 있습니다. 즉 하나의 key 와 하나 이상의 value로 이루어진 리스트를 쌍으로 받는 것입니다.
일반적으로 Map 을 구현한 HashMap을 중복된 Key 가 존재할 수 없습니다. 따라서 위 예시 코드에서 가장 마지막에 put 한 2가 최종적으로 출력됩니다.
MultiValueMap 은 put 이 아닌 add 를 하는 경우에 Key 값이 중복되면 해당 Key 값에 List 로 모두 저장됩니다.
MultiValueMap 또한 put이 가능합니다.
MultiValueMap<String,Integer> multiValueMap = new LinkedMultiValueMap<>();
// 정수가 담기는 리스트를 생성
List<Integer> intList = new LinkedList<>();
// 리스트에 1,2,3 추가
intList.add(1);
intList.add(2);
intList.add(3);
multiValueMap.put("putTest",intList);
System.out.println("multiValueMap = " + multiValueMap); // putTest = [1, 2, 3]
MultiValueMap의 put 은 value에 List를 요구합니다. 따라서 List를 인자로 한 번에 줄 수 있습니다.
주의)
MultiValueMap은 스프링 프레임워크에 내장된 인터페이스로 일반 자바환경에서는 사용할 수 없습니다.
참고 문서:
https://velog.io/@nimoh/Spring-MultiValueMap%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
'스터디 > Spring' 카테고리의 다른 글
[Spring] PUT 과 PATCH 사용시 주의할 점 (0) | 2024.07.06 |
---|---|
[Spring] PUT 과 PATCH 차이 (1) | 2024.07.05 |
[Spring] properties와 yml 중 어떤걸 사용할까? (0) | 2023.09.04 |
[Spring] Mybatis resultType과 resultMap (0) | 2023.08.25 |
[Spring] @JsonProperty와 @SerializedName (0) | 2023.08.19 |
댓글