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 |