본문 바로가기
Spring

[Controller] request.getParameter의 분기 처리

by amoomar 2022. 9. 29.
반응형

 

Controller에서 작업을 하다보니, 하나의 요청처리 로직(method)에서 View에서 넘어온 parameter값을 기준으로 하여 분기 처리를 진행해야 하는 경우 가 발생하였다. 이때 생각과 다른 결과에 당황하며 다른 분기처리 방식을 살펴보았고, 그와 관련된 내용들을 해당 게시글에 정리해보았다.

1. request.getParameter값이 항상 존재할 경우
2. request.getParameter값이 없을수도 있는 경우

 

 


 

 

1. request.getParameter값이 항상 존재할 경우

마땅한 예시가 떠오르지 않아, 본인이 겪은 상황을 예시로 정리해보았다.

// 비정상 출력
@RequestMapping(value="/aaa/bbb/ccc.do")
public String requestProcessingMethod(HttpServletRequest request, HttpServletResponse response){
	//구분을 위한 변수( 0:기본값 / 1:구분1 / 2:구분2 )
	String system=request.getParameter("system");
	
	if(system.equals("1")){
		// 구분1에 대한 처리 로직
	}else if(system.equals("2")){
		// 구분2에 대한 처리 로직
	}else{
		//기본값일 경우의 처리 로직
	}
    
	return "main";
}

 

위의 기본적인 틀을 통해 확인할 수 있는 내용을 정리해보자면 다음과 같다.

system이라는 변수에는 항상 값이 존재하며, 이 변수의 값에 따라 다른 처리 로직이 필요하다는 것이다.

즉, 실현시키고자 했던 문장은 "view에서 넘어온 값이 1이라면?"과 같은 이치였기 때문에 그와 같은 문법으로 작성한 것이 위의 코드였다.

 

그러나 분기처리는 정상적으로 되지 않았고, view에서 넘어온 값에 상관 없이 무조건 첫 번째 if문으로 처리가 되는 현상이 발생하였다.

 

구글링을 통해 "주체를 변경해보라"는 문장을 확인했고, 그 내용을 반영하여 아래와 같이 수정하였다.

// 정상 출력
@RequestMapping(value="/aaa/bbb/ccc.do")
public String requestProcessingMethod(HttpServletRequest request, HttpServletResponse response){
	//구분을 위한 변수( 0:기본값 / 1:구분1 / 2:구분2 )
	String system="0";
	
	if("1".equals(request.getParameter("system"))){
		// 구분1에 대한 처리 로직
	}else if("2".equals(request.getParameter("system"))){
		// 구분2에 대한 처리 로직
	}else{
		//기본값일 경우의 처리 로직
	}
    
	return "main";
}

 

솔직히 말하자면, 아직도 왜 다르게 수행이 되는지 명확히 이해를 하지는 못하였다. (명확히 이해되신 분이 계시다면 댓글로 설명 부탁드립니다...!) 하지만 때에 따라 값의 비교가 원하는 바대로 진행되지 않을때는 해당 예시처럼 주체를 변경하여 값을 비교해 보는 것도 좋은 방법인 것 같다고 생각한다.

 

 

 

 


 

 

2. request.getParameter값이 없을수도 있는 경우

위의 경우에는 비교를 원하는 변수에 값이 상시로 있을 경우의 분기 처리 였다면,

아래의 예시는 변수에 값이 할당 되어있을수도, 아닐수도 있는 경우의 분기 처리 로직이다.

@RequestMapping(value="/aaa/bbb/ccc.do")
public String requestProcessingMethod(@RequestParam(value="param", required=false)String param, HttpServletRequest request){
	
	if(StringUtils.isEmpty(param)){
		// param이라는 변수에 값 설정이 되어있지 않을때의 처리 로직
	}else{
		// param이라는 변수에 전달된 값이 존재할때의 처리 로직
	}
    
	return "main";
}

 

 

 

@RequestParam이라는 어노테이션의 required속성은value로 넘어올 parameter가 필수인지, 아닌지를 지정해 줄 수 있다.

// 필수임: view에서 param에 할당된 값을 안줬다면 에러로 처리
@RequestParam(value="param", required="true")String param

// 필수가 아님: view에서 param에 값을 할당하지 않아도 에러 처리 하지 않음
@RequestParam(value="param", required="false")String param

 

 

 

 

 


 

 

해당 게시글은 아래 링크의 게시글을 참조하였다.

https://kmhan.tistory.com/218

 

[Java] request 또는 parameter로 받아온 대상에 equals 비교시 에러나는 문제 해결방법

equals 왼쪽에 있는 비교대상은 항상 주체가 되어야 한다 잘못된 if 문 if (! (request.getParameter("aParam").equals("")) {} 수정된 if문 if( !("".equals(request.getParameter("aParam"))) ) [출처] 자바..

kmhan.tistory.com

 

반응형