@RequestParam 및 @PathVariable
특수 문자를 처리하는 동안 @RequestParam
과 @PathVariable
처리하는 동안 의 차이점은 무엇입니까 ?
+
@RequestParam
공간 으로 받아 들여졌습니다 .
의 경우 @PathVariable
, +
로 받아 들여졌다 +
.
@PathVariable
URI에서 자리 표시자를 가져 오는 것입니다 (Spring에서 URI 템플릿이라고 함) — 스프링 참조 서 16.3.2.2 URI 템플릿 패턴 참조@RequestParam
URI에서 매개 변수를 얻는 것 입니다. @RequestParam을 사용하여 요청 매개 변수를 메소드 매개 변수에 바인딩하기 참조
URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
이 2013 년 12 월 5 일에 사용자 1234에 대한 인보이스를 받으면 컨트롤러 방법은 다음과 같습니다.
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
또한 요청 매개 변수는 선택적 일 수 있으며 Spring 4.3.3부터 경로 변수 도 선택적 일 수 있습니다 . 그러나 이로 인해 URL 경로 계층이 변경되고 요청 매핑 충돌이 발생할 수 있습니다. 예를 들어, /user/invoices
사용자에 대한 송장을 제공 null
하거나 ID가 "invoices"인 사용자에 대한 세부 정보 를 제공 하시겠습니까?
요청에서 쿼리 매개 변수 값에 액세스하는 데 사용되는 @RequestParam 주석. 다음 요청 URL을보십시오.
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
위의 URL 요청에서 param1 및 param2의 값은 다음과 같이 액세스 할 수 있습니다.
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
다음은 @RequestParam 주석이 지원하는 매개 변수 목록입니다.
- defaultValue – 요청에 값이 없거나 비어있는 경우 대체 메커니즘으로 사용되는 기본값입니다.
- name – 바인딩 할 매개 변수 이름
- 필수 – 매개 변수가 필수인지 여부입니다. 참이면 해당 매개 변수를 보내지 않으면 실패합니다.
- value – 이름 속성의 별명입니다.
@PathVariable
@ PathVariable 은 들어오는 요청의 URI에서 사용되는 패턴을 식별합니다. 아래 요청 URL을 살펴 보겠습니다.
http : // localhost : 8080 / springmvc / hello / 101? param1 = 10 & param2 = 20
위의 URL 요청은 다음과 같이 Spring MVC에 작성할 수 있습니다.
@RequestMapping("/hello/{id}") public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}
@ PathVariable 주석에는 요청 URI 템플리트를 바인딩하기위한 속성 값이 하나만 있습니다. 단일 메소드에서 다중 @ PathVariable 어노테이션 을 사용할 수 있습니다 . 그러나 하나 이상의 메소드가 동일한 패턴을 갖지 않도록하십시오.
또한 @MatrixVariable이라는 또 다른 흥미로운 주석이 있습니다.
그리고 그것을위한 컨트롤러 방법
@RequestMapping(value = "/{stocks}", method = RequestMethod.GET)
public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) {
logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars });
List<List<String>> outlist = map2List(matrixVars);
model.addAttribute("stocks", outlist);
return "stocks";
}
그러나 다음을 활성화해야합니다.
<mvc:annotation-driven enableMatrixVariables="true" >
@RequestParam은 다음과 같은 쿼리 매개 변수 (정적 값)에 사용됩니다 : http : // localhost : 8080 / calculation / pow? base = 2 & ext = 4
@PathVariable은 다음과 같은 동적 값에 사용됩니다. http : // localhost : 8080 / calculation / sqrt / 8
@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
int pow = (int) Math.pow(base1, ext1);
return pow;
}
@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
double sqrtnum=Math.sqrt(num1);
return sqrtnum;
}
application / x-www-form-urlencoded midia 유형은 space를 + 로 변환하고 수신자는 + 를 space 로 변환하여 데이터를 디코딩합니다 . 자세한 내용은 url을 확인하십시오. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
@PathVariable - must be placed in the endpoint uri and access the query parameter value from the request
@RequestParam - must be passed as method parameter (optional based on the required property)
http://localhost:8080/employee/call/7865467
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = false) String callStatus) {
}
http://localhost:8080/app/call/7865467?status=Cancelled
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = true) String callStatus) {
}
참고 URL : https://stackoverflow.com/questions/13715811/requestparam-vs-pathvariable
'Programing' 카테고리의 다른 글
루비 해시 객체를 JSON으로 변환하는 방법? (0) | 2020.03.09 |
---|---|
스택의 목적은 무엇입니까? (0) | 2020.03.09 |
모노는 프라임 타임 준비가 되셨습니까? (0) | 2020.03.09 |
별도의 AngularJS 컨트롤러 파일을 만드는 방법은 무엇입니까? (0) | 2020.03.09 |
통화 / 돈을 처리하는 가장 좋은 방법은 무엇입니까? (0) | 2020.03.09 |