SpringFramework/BASIC

[ @ParhVariable ] 어노테이션을 통한 uri path로 파라미터를 처리하는 방법

유혁스쿨 2020. 9. 5. 00:53
728x90
반응형

@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) {

안됨

 

728x90
반응형