Spring MVC의 컨트롤러에 대한 인수로 URL의 일부를 사용하십시오.
-
20-09-2019 - |
문제
예를 들어 URL이 있습니다
foo.com/bar/99
99는 인수로서 컨트롤러의 메소드에 직접 사용할 수 있습니다. 컨트롤러가 /바에 매핑됩니다
ASP.NET MVC 또는 DJANGO에 익숙한 사람이라면 이는 전자의 lour.maproute와 유사하며 후자의 urlpatterns에서 (? p d+)를 사용합니다.
이를 얻기 위해 HTTP 요청 객체에서 데이터를 직접 처리 할 수는 있지만 Spring MVC가이를 지원하는지 여부를 알고 싶습니다 (특히 버전 2.5).
해결책
아니요, 스프링은 이것을 상자에서 지원하지 않습니다. 그러나 메소드에 대한 경로를 맵핑 할 수 있습니다 이름 사용 @requestmapping 적절하게 구성되었습니다 InternalPathMethodNameResolver
:
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
지정해야합니다 prefix
~을 위한 InternalPathMethodNameResolver
메소드 이름은 숫자로 시작할 수 없기 때문에 위의 작업을 위해 "do"로서. "foo.com/bar/baz"를 URL로 사용하고 메소드를 호출하는 경우 baz
, 추가 구성이 필요하지 않습니다.
메소드 이름 매핑을 사용하지 않으려면 매개 변수로 '99'를 얻는 것이 쉽게 가져 오는 것만 큼 쉽습니다. request.getPathInfo()
당신의 방법에서.
다른 팁
Spring 3을 사용하는 사람이라면 누구나 새로운 @PathVairable 주석을 사용하여 수행 할 수 있습니다.
다음은 예입니다 http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/
@RequestMapping("/hotels/{hotelId}")
public String getHotel(@PathVariable String hotelId, Model model) {
List<Hotel> hotels = hotelService.getHotels();
model.addAttribute("hotels", hotels);
return "hotels";
}