如何在Spring Servlet中接受JSON POST参数作为@RequestParam?

时间:2017-06-22 08:37:55

标签: java json spring spring-mvc

我正在尝试创建一个应该使用POST请求调用的JSON servlet。以下应该有效,但没有。可能缺少什么?

@RestController
public class MyServlet {
    @PostMapping("/")
    public String test(@RequestParam String name, @RequestParam String[] params) {
        return "name was: " + name;
    }
}

JSON POST:

{
   "name": "test",
   "params": [
      "first", "snd"
   ]
}

结果:name始终为null。为什么呢?

"Response could not be created: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'name' is not present"

2 个答案:

答案 0 :(得分:6)

一般情况下,我不会在POST方法中传递请求参数。相反,我正在使用DTO将它传递到体内,如:

@RequestMapping(value = "/items", method = RequestMethod.POST)
    public void addItem(@RequestBody ItemDTO itemDTO) 

然后,您需要将ItemDTO创建为包含必要字段的POJO。

答案 1 :(得分:0)

除了@stzoannos回答之外,如果你不想为json对象创建POJO,你可以使用google GSON库将json解析为JsonObject类,这允许使用与get和set相同的参数方法

JsonObject jsonObj = new JsonParser().parse(json).getAsJsonObject();
return "name is: " + jsonObj.get("name").getAsString();
相关问题