@PathVariable
파라미터를 uri path로 처리하는 방법
기본적으로 주소창에 파라미터를 심어서 넘길때 주로 사용하는 QueryString에 대해서 아시나요
<td><a href="<c:url value='/board/content?boardNo=${b.boardNo}'/>">
즉,
/content?boardNo=${b.boardNo}
이와 같이 ?파라미터명=값 으로 처리하여서 파라미터값을 넘기게되면
@GetMapping("/content")
public void content(int boardNo){
System.out.println("?boardNo="+boardNo)
}
위와같이 메서드에서 매개변수를 부여하여 받을수 있었습니다.
하지만 새로운방법이 있습니다.
그것은 바로 uri매핑주소에 파라미터로 넘길 값을 바로 지정하여 넘기는방법입니다.
<td><a href="<c:url value='/board/content/${b.boardNo}'/>">
즉,
/board/content/${b.boardNo}
이와같이 /content/${b.boardNo} 이렇게 uri경로에 값을 씌워주면
주소창에 uri형식으로 값이 넘어갑니다.
하지만 컨트롤러에서 이것을 받기위해서는 @PathVariable이라는 어노테이션을 써야합니다.
@GetMapping("/content/{boardNo}")
@GetMapping에서 uri주소를 ("/content/{boardNo}")로 선언해주면 파라미터를 1차적으로 받을 수 있습니다.
@GetMapping("/content/{boardNo}")
public String content(@PathVariable int boardNo){
System.out.println("?boardNo="+boardNo)
return "/content";
}
이것은 boardNo라는 임의의 uri명으로 받겠다는 뜻입니다.
이렇게 보았을때 이런 uri방식으로 값을 받게된다면 파라미터 라는 단어를 사용하면 안될거 같기도 합니다.
path를통해 받는것이기때문에 파라미터라는 표현 대신 uri명 이라고 하겠습니다.
@PathVariable("받은 uri명")
만약 uri명을 변수명에 그대로 적용하지 않고 다른이름의 변수명에 담을아야 할때에는
@GetMapping("/content/{boardNo}")
public String content(@PathVariable("boardNo") int bNo){
System.out.println("?boardNo="+boardNo)
return "/content";
}
@PathVariable("받은 uri명")으로 받을때 당시의 매핑주소에 임의로 선언한 {uri명}을 어노테이션의 속성값으로 부여해주면 가능합니다.
또한 이때는 void 형의 메서드로 하면 안되고 무조건 문자열로 viewResolver경로를 반환하는 String타입이나 ModelAndView를 사용하여 존재하는 뷰페이지파일을 리턴해야 합니다.
void형태의 메서드를 사용한다면 등록된 매핑주소 그대로 공통매핑주소와 조합된 후 앞뒤로 viewResolver가 조립되어 /content/${boardNo}.jsp 이라는 이름의 존재하지 않는 뷰페이지 파일을 받아오려 하기 때문입니다.
@GetMapping("/content/{boardNo}")
public String content(@PathVariable("boardNo") int bNo, Model m) {
됨
@GetMapping("/content/{bNo}")
public void content(@PathVariable("bNo") int boardNo, Model m) {
안됨
'SpringFramework > BASIC' 카테고리의 다른 글
[ MD5 해시코드 ] 비밀번호 암호화 로직 활용 (0) | 2020.09.09 |
---|---|
[DELETE] 요청 POST방식/ (GET방식 불가) (0) | 2020.09.05 |
[JunitTest 2] @Runwith, @ContextConfiguration / 데이터 조회 및 삭제기능 Test (0) | 2020.09.04 |
[JunitTest 1] 단일 테스트 / 오라클 DB 연결 Test / 자동 리소스 닫기 (0) | 2020.09.04 |
[MyBatis] resultType / 객체 별칭 관리기능 mapperLocations 주입 (0) | 2020.09.04 |