Java 如何在SpringServlet中将JSON POST参数作为@RequestParam接受?
我正在尝试创建一个Java 如何在SpringServlet中将JSON POST参数作为@RequestParam接受?,java,json,spring,spring-mvc,Java,Json,Spring,Spring Mvc,我正在尝试创建一个POSTservlet,它应该通过JSON请求调用。以下内容应该有效,但不能。可能遗漏了什么 @RestController public class MyServlet { @PostMapping("/") public String test(@RequestParam String name, @RequestParam String[] params) { return "name was: " + name; } } JSO
POST
servlet,它应该通过JSON
请求调用。以下内容应该有效,但不能。可能遗漏了什么
@RestController
public class MyServlet {
@PostMapping("/")
public String test(@RequestParam String name, @RequestParam String[] params) {
return "name was: " + name;
}
}
JSON帖子:
{
"name": "test",
"params": [
"first", "snd"
]
}
结果:名称始终为空。为什么?
“无法创建响应:org.springframework.web.bind.MissingServletRequestParameterException:所需字符串参数'name'不存在”
通常,我不会在POST方法中传递请求参数。相反,我使用DTO将其传递到身体中,如:
@RequestMapping(value = "/items", method = RequestMethod.POST)
public void addItem(@RequestBody ItemDTO itemDTO)
然后,您需要将ItemDTO创建为带有必要字段的POJO。除了@stzoannos answer,如果您不想为json对象创建POJO,您可以使用库将json解析为JsonObject类,该类允许通过与get和set方法相同的方法处理参数
JsonObject jsonObj = new JsonParser().parse(json).getAsJsonObject();
return "name is: " + jsonObj.get("name").getAsString();
使用@RequestBody参数,该参数将给出结果创建
@GetController
并将其作为get查询字符串发送是可行的,但我需要POST+JSON。@PawanPandey如果我对这两个参数都使用@RequestBody
,我会得到一个错误:“无法创建响应:org.springframework.http.converter.httpMessageNodeTableException:缺少必需的请求正文:public java.lang.String MyServlet.test(java.lang.String,java.lang.String[])”
具有类似mydata{name;params[];}的pojo类和at控制器写入测试(@RequestBody mydata)并检查请求头中的内容类型是否为application/jsoni是否还有其他机会?如果可能的话,我希望不必创建dto(因为我希望能够使用eg@RequestParam(required=false,defaultValue=“some”)
关于POST参数您可以使用hashmap进行操作,但您需要使用@RequestBody
来接受POST参数。或者,将json字符串化并传入POST url的查询字符串,然后在mapOk中获取@RequestParam,作为替代方法,您可以只使用@RequestBody Map
,Map.get(“format”);Map.get(“params”)
。如果仅将少数参数作为json传递,则更适合使用此选项,因此此处不需要DTO。