HttpServletRequest Parameter 추가
HttpServletRequest 클래스에는 getParameter만 있고 setParameter는 없다.
클라이언트 단에서 날아온 값으로 서블릿에서는 setAttribute 함수밖에 없으며 setAttribute 값은 getAttribute로 밖에 꺼내올 수 없는데, setAttribute와 setParameter에는 서버에서 세팅했는지, 클라이언트에서 세팅했는지에 대한 차이가 있다.
따라서 다른 API / 라이브러리 등에서 getParamter를 하기전에 이미 들어있는 값을 바꾸려면 httpServletRequest를 전부 복사해서 다시 만들어야 한다.
HttpServletRequest를 전부 복사해서 갈아끼우는 Class
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
class ModifiableHttpServletRequest extends HttpServletRequestWrapper {
private HashMap<String, Object> params;
@SuppressWarnings("unchecked")
public ModifiableHttpServletRequest(HttpServletRequest request) {
super(request);
this.params = new HashMap<String, Object>(request.getParameterMap());
}
public String getParameter(String name) {
String returnValue = null;
String[] paramArray = getParameterValues(name);
if (paramArray != null && paramArray.length > 0) {
returnValue = paramArray[0];
}
return returnValue;
}
@SuppressWarnings("unchecked")
public Map getParameterMap() {
return Collections.unmodifiableMap(params);
}
@SuppressWarnings("unchecked")
public Enumeration getParameterNames() {
return Collections.enumeration(params.keySet());
}
public String[] getParameterValues(String name) {
String[] result = null;
String[] temp = (String[]) params.get(name);
if (temp != null) {
result = new String[temp.length];
System.arraycopy(temp, 0, result, 0, temp.length);
}
return result;
}
public void setParameter(String name, String value) {
String[] oneParam = { value };
setParameter(name, oneParam);
}
public void setParameter(String name, String[] value) {
params.put(name, value);
}
}
사용방법
ModifiableHttpServletRequest m = new ModifiableHttpServletRequest(request);
m.setParameter("key1", "value1");
//TODO
request = (HttpServletRequest)m;
기존 request 객체에 없던 key1 키에 대한 value1의 값이 포함되게 된다.
원래 존재하던 request의 key, value를 hashMap에 복사하고, 다시 request에 덮어씌우는 방식이다.
'Language > Java' 카테고리의 다른 글
[JAVA] No serializer found for class X.Y.Z and no properties discovered to create BeanSerializer (0) | 2020.03.15 |
---|---|
[JAVA] Gson (Google Json) 사용하기 (0) | 2019.07.19 |
[JAVA] HTTPS 에서 HTTP 프로토콜 변경 시 세션 유지시키기 (0) | 2019.05.21 |
[JAVA] 두 날짜 사이 월 구하기 (1) | 2019.02.19 |
[JAVA] TEXT를 IMAGE로 변환 (Text To Image Convert) (3) | 2018.03.20 |
댓글