CODING/🍃Spring & Spring Boot

[Spring boot] 스프링부트에서 commandMap 사용하기

2024. 2. 19. 08:00
목차
  1. 이슈발생
  2. 이슈해결
  3. 1. CommandMap.java
  4. 2. CustomMapArgumentResolver.java 
  5. 3. WebConfig.java
728x90

스프링부트에서 commandMap 사용하기

 

이슈발생

스프링 프로젝트 코드를 그대로 스프링부트로 가져왔을 때, insert 시에 잘 담기던 데이터가 commandMap에 안담기고 null 로 들어갔다. 같은 코드인데....😤 스프링부트에서도 commandMap을 사용하기 위한 과정을 담았다.

 

 

이슈해결

 

1. CommandMap.java

 

** CommandMap 파일이란?

request에 담겨있는 파라미터를 Map에 담아주는 역할을 하는 클래스. 각 컬럼의 데이터들을 하나하나 파라미터로 받아오는 것보다 한 번에 Map에 담아서 넘길 수 있어서 간편하다.

 

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class CommandMap {
	Map<String,Object> map = new HashMap<String,Object>();
	
	public Object get(String key){
		return map.get(key);
	}

	public void put(String key, Object value){
		map.put(key, value);
	}

	public Object remove(String key){
		return map.remove(key);
	}

	public boolean containsKey(String key){
		return map.containsKey(key);
	}

	public boolean containsValue(Object value){
		return map.containsValue(value);
	}

	public void clear(){
		map.clear();
	}

	public Set<Entry<String, Object>> entrySet(){
		return map.entrySet();
	}

	public Set<String> keySet(){
		return map.keySet();
	}

	public boolean isEmpty(){
		return map.isEmpty();
	}

	public void putAll(Map<? extends String, ?extends Object> m){
		map.putAll(m);
	}

	public Map<String,Object> getMap(){
		return map;
	}
}

 

 

2. CustomMapArgumentResolver.java 

 

** CustomMapArgumentResolver 파일이란?

HTTP 요청의 파라미터를 가져와서 CommandMap 객체로 변환하는 역할을 하는 클래스.

변환이 되면 핸들러 메소드에서 CommandMap 타입의 매개변수를 사용할 수 있게 된다.

 

import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

 
public class CustomMapArgumentResolver implements HandlerMethodArgumentResolver{
	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		return CommandMap.class.isAssignableFrom(parameter.getParameterType());
	}

	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
		CommandMap commandMap = new CommandMap();

		HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
		Enumeration<?> enumeration = request.getParameterNames();

		String key = null;
		String[] values = null;
		while(enumeration.hasMoreElements()){
			key = (String) enumeration.nextElement();
			values = request.getParameterValues(key);
			if(values != null){
				commandMap.put(key, (values.length > 1) ? values:values[0] );
			}
		}
		return commandMap;
	}
}

 

 

3. WebConfig.java

 

2024.02.12 - [CODING/Spring] - [Spring boot] jsonView.jsp not found, jsonView 리턴 안될 때

 

728x90

이전 글에서 생성한WebConfig.java 파일에 아래 빈을 추가해 주었다.

위에서 추가한 CustomMapArgumentResolver를 사용하기 위함이다.

// commandMap 사용 위한 CustomMapArgumentResolver 쓰기 위함
@Bean
public CustomMapArgumentResolver customMapArgumentResolver() {
    return new CustomMapArgumentResolver();
}

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    argumentResolvers.add(new CustomMapArgumentResolver());
}

 

 

** 3개 파일의 위치는 모두 util 패키지에 같이 넣어두었다.

 

 

 

300x250
저작자표시 비영리 변경금지

'CODING > 🍃Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] 콘솔창에 SQL 출력하기  (0) 2024.07.18
[Spring Boot] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?  (0) 2024.06.18
[Spring boot] jsonView.jsp not found, jsonView 리턴 안될 때  (0) 2024.02.13
[Spring boot] 스프링부트 프로젝트 war 파일 생성하기  (1) 2024.01.26
[Spring] DB 엑셀 다운로드 기능 구현하기  (0) 2024.01.22
  1. 이슈발생
  2. 이슈해결
  3. 1. CommandMap.java
  4. 2. CustomMapArgumentResolver.java 
  5. 3. WebConfig.java
'CODING/🍃Spring & Spring Boot' 카테고리의 다른 글
  • [Spring Boot] 콘솔창에 SQL 출력하기
  • [Spring Boot] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
  • [Spring boot] jsonView.jsp not found, jsonView 리턴 안될 때
  • [Spring boot] 스프링부트 프로젝트 war 파일 생성하기
레코딩딩
레코딩딩
IT, 코딩, 개발
300x250
레코딩딩
코딩의 레코딩
레코딩딩
전체
오늘
어제
  • 전체보기 (102)
    • CODING (93)
      • 🍃Spring & Spring Boot (14)
      • ⚡JavaScript (14)
      • 🔒SSL (5)
      • ⛅AWS (7)
      • 🐧Linux (3)
      • 🎨Windows (6)
      • 🐱Tomcat (5)
      • 🐬MySQL (7)
      • 🎈HTML+CSS (10)
      • 🟡Python🔵 (2)
      • 🔧Tools (13)
      • 💡TIP (7)
    • RECORDING (9)
      • 👨‍💻 방통대 컴퓨터과학과 (4)
      • 🐾정보처리기사 (1)
      • 💿운영체제 (2)
      • 📗BOOK (2)

🏆 인기 글

🔎 태그

  • 스프링부트
  • 이클립스 옵션
  • Let's Encrypt
  • win-acme
  • js
  • mysql
  • 윈도우
  • 스프링
  • EC2
  • 이클립스
  • dbeaver
  • css
  • 자바스크립트
  • 톰캣 실행
  • 방통대 컴퓨터과학과
  • SSL
  • 방통대 후기
  • HTML
  • AWS
  • 디비버

📫 최근 댓글

🔥 최근 글

hELLO · Designed By 정상우.v4.2.2
레코딩딩
[Spring boot] 스프링부트에서 commandMap 사용하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.