1

我正在 SpringBoot 中进行发布请求并使用邮递员对其进行测试,但是当我在邮递员中传递正文并尝试在我的应用程序中读取它时,它会引发错误。
这是Spring中的方法:

@PostMapping(path=PathConstants.START_ACTION)
    public String start(@PathVariable String processDefinitionId, @RequestBody(required=false) String params){

if(params!=null) {
                Gson gson = new Gson();
                Map<String,Object> pvar = gson.fromJson(params, Map.class);
                System.out.println(pvar);           
            } 
}

在邮递员中,我以这种方式传递参数:

在此处输入图像描述

我在标题中将内容类型指定为application/json.
但是,如果我使用“参数”选项卡传递我的参数

在此处输入图像描述

有用。但我需要将它们作为身体而不是参数传递。这里的问题在哪里?

4

1 回答 1

1

方法一:

标题Content-Typeapplication-json. 所以 Spring 尝试将你构建json成一个LinkedHashMap.

现在,试试这个...

@PostMapping(path=PathConstants.START_ACTION)
    public String start(@PathVariable String processDefinitionId, @RequestBody(required=false) Map<String, Object> bodyObject){

if(MapUtils.isNotEmpty(bodyObject)) {
              Map<String,Object> pvar = bodyObject;
}

代替

@PostMapping(path=PathConstants.START_ACTION)
    public String start(@PathVariable String processDefinitionId, @RequestBody(required=false) String params){

if(params!=null) {
                Gson gson = new Gson();
                Map<String,Object> pvar = gson.fromJson(params, Map.class);
                System.out.println(pvar);           
            } 
}

header通过content-typeas application/json。这会工作..

方法2 ::

现在,如果您仍想像这样使用自己的旧签名方法..

 @PostMapping(path=PathConstants.START_ACTION)
        public String start(@PathVariable String processDefinitionId, @RequestBody(required=false) String params){}

然后在headerascontent-typetext/plain。那么您的旧方法也可以使用..

于 2019-04-15T09:47:27.433 回答