IllegalStateException:需要一个字符串,但在第 1 行第 2 列路径 $ 处 BEGIN_OBJECT;嵌套异常是 com.google.gson.JsonSyntaxException
IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $; nested exception is com.google.gson.JsonSyntaxException
我正在 SpringBoot 中执行 post 请求并使用 postman 对其进行测试,但是当我在 Postman 中传递 body 并尝试读取时在我的应用程序中,它会抛出错误。
这是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);
}
}
在 Postman 中,我以这种方式传递参数:
我在header中指定content-type为application/json
。
但是,如果我使用“Param”选项卡传递我的参数
有效。但我需要将它们作为 body 而不是参数传递。哪里出了问题?
Method 1 :
Header Content-Type
是 application-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-type
作为 application/json
。这会起作用..
Method 2 ::
现在,如果您还想像这样使用自己的旧签名方法..
@PostMapping(path=PathConstants.START_ACTION)
public String start(@PathVariable String processDefinitionId, @RequestBody(required=false) String params){}
然后在 header
中 content-type
为 text/plain
。那么您的旧方法也可以使用..
我正在 SpringBoot 中执行 post 请求并使用 postman 对其进行测试,但是当我在 Postman 中传递 body 并尝试读取时在我的应用程序中,它会抛出错误。
这是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);
}
}
在 Postman 中,我以这种方式传递参数:
我在header中指定content-type为application/json
。
但是,如果我使用“Param”选项卡传递我的参数
有效。但我需要将它们作为 body 而不是参数传递。哪里出了问题?
Method 1 :
Header Content-Type
是 application-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-type
作为 application/json
。这会起作用..
Method 2 ::
现在,如果您还想像这样使用自己的旧签名方法..
@PostMapping(path=PathConstants.START_ACTION)
public String start(@PathVariable String processDefinitionId, @RequestBody(required=false) String params){}
然后在 header
中 content-type
为 text/plain
。那么您的旧方法也可以使用..