在服务中获取PathVariables,RequestParams,RequestBody

时间:2019-02-12 09:42:12

标签: java spring spring-boot java-8 httprequest

我想从àspring服务组件中的httpRequest获取所有参数(不需要标头)

我正在使用Spring boot,请看以下示例:

private final MyService myService;

@RequestMapping(value = "/processform/{process_id}", method = RequestMethod.POST)
    public @ResponseBody
    LinkedHashMap<String, String> runForm( String process_id,
                                               @RequestParam String className,
                                               @RequestBody(required = false) IupicsFormVO vo) {
        return myService.run(process_id, className, vo);
    }

此控制器生成此curl(不包含标题):

curl -X POST \
  'http://localhost:8087/processform/119?className=com.stackOverflow.question.ClassName.java' \
  -d '{  
"name" : "Name",
"age" : "Age"
}'

现在我需要从此URL获取所有参数(可能是通过注入HttpServletRequest

预期结果是:

{  
   "process_id":"119",
   "className":"com.stackOverflow.question.ClassName.java",
   "body":{  
      "name":"Name",
      "age":"Age"
   }
}

我找到了this个示例

String finalPath = apm.extractPathWithinPattern(bestMatchPattern, path

但是当我使用它时,我总是会得到一个空的finalPath谢谢您的时间

2 个答案:

答案 0 :(得分:0)

您需要在路径中放入变量才能使用@PathVariable。例如:

@RequestMapping(value = "/processform/{id}", method = RequestMethod.POST)
public @ResponseBody
LinkedHashMap<String, String> runForm(@PathVariable("id") String process_id, ...

答案 1 :(得分:0)

您的路径应具有路径变量占位符。 /processform/{process_id}。另外,您需要指定request parameter

@RequestMapping(value = "/processform/{process_id}", method = RequestMethod.POST)
    public @ResponseBody
    LinkedHashMap<String, String> runForm(HttpServletRequest request, @PathVariable("process_id") String process_id, @RequestParam("name") String lassName,@RequestParam("age") String age,
                                               @RequestBody(required = false) IupicsFormVO vo) {
        return myService.run(process_id, className, vo);
    }

有关Path variable and Request parameter 的更多详细信息,请查看本教程。

编辑: 如果要从请求中获取这些属性,则控制器方法中的第一个参数为HttpServletRequest request。将request参数传递给您的服务,然后您就可以使用request.getParameter("paramName")request.getAttribute("attributeName")来访问值。