PathVariable과 RequestParam의 getMapping설정방법

728x90

공부를 하다가 가끔식 아는 개념들이 머리속에서 충돌해서 자체적 혼란을 겪을 때가 많다.

그래도 이 고비를 넘기면 다음부터 절대 헷갈리지 않으므로 오늘자 개념을 다시한번 정리한다.

 

SQL연동을 하다가 PathVariable과 RequestParam의 설정에 혼란을 겪었는데 코드의 문제는 url mapping 설정의 오류였다.

 

PathVariable

PathVariable은 설정한 그 값 자체의 value를 return하기 때문에 받아온 변수 이름과 mapping한 변수 이름이 동일해야 적용된다.

 

아래와 같이 PathVariable이라는 애노테이션을 사용하면 다음 mapping된 url {id}에 해당되는 부분이 int값 id로 받아와져서 다음 인터페이스 mapper로 넘겨주는 방식이다.

따라서 다음 {id}와 @pathVariable()안에 있는 값은 동일해야한다.

하지만 우리가 java에서 쓸 값의 변수이름(int id) 은 달라도 상관없다. 어차피 우리가 편의대로 사용하면 그만.

	@GetMapping("/detail/{id}")
	public String getbyid(@PathVariable("id")int id, Company company, Model m) {
		Company com = companyMapper.getbyid(id);
		m.addAttribute("com", com);
		
		return "compdetail";
	}

 

RequestParam

RequestParam은 스프링 전에 쓰던 request.getparameter와 개념이 똑같다고 이해하면 된다.

만약 url이 localhost/test?id=test 라면 아래와 같이 설정할 수 있다.

 

위와 달리 getMapping에 test밖에 들어가지 않았는데 그 이유는 다음 url ? 뒤에 올 id가 자동적으로 RequestParam에 mapping되서 String test라는 변수의 이름으로 값이 반환되기 때문이다

만약 mapping을 위와 동일한 방식으로 /test?id={id}라는 방식으로 넣어주면 오류가 난다.

*paramter가 2번 중복되어 출력되기 때문

	@RequestMapping("/test")
	public String getbyid(@RequestParam("id")String test, Company company, Model m) {
		Company com = companyMapper.getbyid(test);
		m.addAttribute("com", com);
		
		return "compdetail";
	}
728x90