본문 바로가기

Spring 정리/Spring MVC 5

파라미터 추출하기

반응형
<test.jsp>
<a href="test1?data1=100&data2=100">test1 get</a>

======================================================


<TestController.java>
@GetMapping("/test1")
public String test(HttpServletRequest request){
	String data1 = request.getParameter("data1");
    String data2 = request.getParameter("data2");
    return "result";
}

a태그 안에 주소 뒤 ?이후에 데이터와 값을 써 넣으면, 이것들은 HttpServletRequest 객체에 담기게 된다.

test1 경로와 관련하여 Mapping이 될 때 저 파라미터들을 검사할 수 있다.

즉, Controller에서 해당 파라미터를 추출할 수 있는 것이다.

 

(WebRequest는 HttpServletRequest 클래스를 확장한 클래스이다. 위에 구현한 기능에 다른 기능이 추가된다.)

 

http://test.com/main1/main2/main3 원래는 일반적인 Web Application에서는 경로의 의미이지만,

Spring MVC에서는 main1=값 main2=값 main3=값 으로 해석이 가능하다.

 

 

 

<test.jsp>
<a href="test1?100/200/300">test1 get</a>

======================================================


<TestController.java>
@GetMapping("/test1/{data1}/{data2}/{data3}")
public String test(@PathVariable String data1,
				   @PathVariable String data2,
                   @PathVariable String data3){
	System.out.println(data1);
    System.out.println(data2);
    System.out.println(data3);
    return "result";
                   }
)

일반적인 HttpServletRequest는 ? 뒤에 내가 선택하거나 작성한 값이 넘어간다.

하지만 Restful API에서는 /로 구분하며 사이트 주소를 정의하는 경우들이 있다.

따라서 GetMapping에 {}표시를 하여 경로에 대한 구분을 해준다.

예를 들어 {data1}이 있으면, 해당 위치에 있는 값을 파라미터로 전달받을 수 있으며 이때 @PathVariable을 사용한다.

 

 

 

<test.jsp>
<a href="test6?data1=100&data2=200&data3=300&data3=400">test6</a>

@GetMapping("/test6")
	public String test5(@RequestParam int data1,
						@RequestParam int data2,
  					    @RequestParam int[] data3) {
		System.out.println(data1);
		System.out.println(data2);
		for(int a : data3) {
			System.out.println(a);
		}
		
		return "result";
	}

 

@RequestParam은 @PathVariable과 달리, ?뒤에 넘겨진 값을 전달받을 때 사용한다. HttpServletRequest를 사용하지 않고, 매개변수에 @RequestParm을 사용하여 바로 입력받을 수 있다. 

 

매개변수명을, 해당 URL값과 똑같이 쓰면 바로 전달 받을 수 있다. 혹시 매개변수명을 바꾸고 싶다면 value를 사용한다.

 

존재하는 파라미터를 넘겨 받지 않는 경우 오류가 나지 않지만 존재하지 않는 파라미터를 넘겨 받을 때는 오류가 난다는 것에 주의한다. 그래서 존재하지 않는 경우를 고려하기 위해서 required를 사용하면, 파라미터로 넘어오지 않아도 null값으로 값이 저장된다( *주의 String은 null값으로 나오나, int형으로 받으면 null을 int로 형변환할 수 없어 오류발생) 

 

혹시 어떠한 값을 미리 정해두고 싶다면 defaultValue를 사용해 default 값을 정한다.

 

<test.jsp>
<a href="test6?data1=100">test6</a>

@GetMapping("/test7")
	public String test7(@RequestParam(value="data1") int value1,
						@RequestParam(required=false) String data2, 
           				@RequestParam(defaultValue="0",required=false) int data3) {
		System.out.println(value1);
		System.out.println(data2);
		return "result";
	}

value="data1"을 설정했기 때문에 파라미터를 data1이 아닌 value1으로 바꿔서 사용할 수 있다.

required=false를 사용했기 때문에, 파라미터로 넘어오지 않는 data2에 대하여 임의적으로 사용할 수 있으며.

아무값도 설정되지 않기 때문에 null이 나온다. 하지만 int data2선언을 했다면 오류가 난다.(500오류)

defaultValue="0"으로 지정함으로써, rquired=false와 함께 사용해 파라미터로 넘어오지 않지만 int형으로 사용 가능하게 만들었다. 이 때, defaultValue값이 String으로 정의되어 있는데, int data3로 받았기 때문에 int로 형변환된다.

반응형

'Spring 정리 > Spring MVC 5' 카테고리의 다른 글

ViewResolver  (0) 2020.05.25
파라미터에 객체를 주입받기  (0) 2020.05.25
URL Mapping  (0) 2020.05.24
프로젝트설정(not Xml, but Java)  (0) 2020.05.24
프로젝트 세팅(web.xml, servlet-context.xml)  (0) 2020.05.24