[Servlet/Srping] ReuqestParameter Input Parameter 수정하기

half·2023년 9월 25일
0

HttpServlet 으로 들어온 Parameter들을 값을 변경해서 사용할 수 있다.

  • 특정 특수문자 변환하기
  • 특정 서비스 진입 전 입력된 데이터를 가공하기에 유용하다

1) HttpServletRequest 변환 클래스 추가

public class ModifiableHttpServletRequest extends HttpServletRequestWrapper {

	private HashMap<String, Object> params;
	
	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);
	}
}

2) Controller에서 적용 예제

public ModelAndView boardList(HttpServletRequest request) {
		
	ModifiableHttpServletRequest modifiable = new ModifiableHttpServletRequest(request);
		
	String nameReplace = request.getParameter("name").toUpperCase();
		
	modifiable.setParameter("name", nameReplace);
 }

물론 Parameter를 변수로 사용해서 변환할 수 있지만 HttpServletRequest를 직접 사용해야 할 경우에는 유용하게 이용할 수 있다.

profile
아메리카노 수혈 받는 중

0개의 댓글