我正在使用@RquestMapping
将url映射到控制器方法。
@RestController
@RequestMapping(path = "/api/tasks")
public class TaskController { ....
并且控制器内部的方法具有/{id}
请求映射注释。
@RequestMapping(
path = "/{taskId},
method = RequestMethod.GET
)
public Map<String, Object> methodOne(...
我想在里面访问该方法的http方法和绝对路径(已配置的路径)。
即。我想将/api/tasks/{taskId}
作为值(不是/api/tasks/1
,如果api被调用为任务ID 1),GET
作为methodOne内部的方法。
我检查了HandlerMapping
但它返回了客户端调用的实际资源路径。不是方法/资源的已配置路径。
任何帮助或指导都将受到高度赞赏。谢谢。
答案 0 :(得分:0)
@RequestMapping(path = "/{id}", method = [RequestMethod.DELETE])
public void test(@PathVariable("id") String id, HttpServletRequest request) {
\\ Code Here
}
在方法参数中,id
是pathVariable。请求方法可以在请求变量中访问(虽然我不知道有什么意义,因为你限制它只接受GET请求)
答案 1 :(得分:0)
根据@codedetector的建议,最好的选择是如果你有请求对象,或者你可以添加一个,如果你没有它。
@RequestMapping(path = "/{taskId}, method = RequestMethod.GET)
public String methodOne(HttpServletRequest request){
String test = request.getRequestURI();
return test;
}
如果您的方法中没有请求对象,请使用以下代码获取系统上的任何URL。
import org.springframework.hateoas.mvc.ControllerLinkBuilder
...
ControllerLinkBuilder linkBuilder = ControllerLinkBuilder.linkTo(methodOn(YourController.class).getSomeEntityMethod(parameterId, parameterTwoId))
URI methodUri = linkBuilder.Uri()
String methodUrl = methodUri.getPath()
--------编辑 我不确定为什么你需要这种格式&#34; / api / tasks / {taskId}&#34;作为值(不是/ api / tasks / 1)但我可以考虑使用常量将它用于@RequestMapping路径参数,然后在获得绝对路径后轻松地将其替换/附加到该常量。
String pathParam ="/{taskId}"
答案 2 :(得分:0)
String[] pathReqMappingAnnotationOnControllerClass = this.getClass().getAnnotation(RequestMapping.class).path();
Method method = TaskApiController.class.getMethod("getListOfTasks", HttpServletRequest.class, HttpServletResponse.class);
String[] pathReqMappingAnnotationOnControllerMethod = method.getAnnotation(RequestMapping.class).path();
String wholePath = pathReqMappingAnnotationOnControllerClass[0] + pathReqMappingAnnotationOnControllerMethod[0];
//pathReqMappingAnnotationOnControllerMethod will be empty array if method is not annotated for path
答案 3 :(得分:0)
@RequestMapping(path = "/{id}", method = [RequestMethod.DELETE])
public void test(@PathVariable("id") String id, HttpServletRequest request) {
switch(id){
case 1:
method1();
break;
case 2:
method2();
break
....
....
}
}
private void method1(){};
private void method2(){};
private void method3(){};