【问题标题】:Correct way of making POST request with JSON in SPRING MVC?在 SPRING MVC 中使用 JSON 发出 POST 请求的正确方法?
【发布时间】:2015-09-19 02:12:15
【问题描述】:

我对 spring 还很陌生,想要以正确的方式发出帖子请求。我有一个要发布到服务器的 json 对象列表 例如

var list = [{name:"abc",age:23},{name:"xyz",age:22},{name:"xcx",age:33}]

我正在以这种方式使用 xhr 在 google 关闭中向我的服务器发出发布请求

 model.xhrPost(id,url,"list="+JSON.stringify(this.list),callback);

这就是我的控制器的样子

@RequestMapping(value={"/getInput"}, method = RequestMethod.POST)
    @ResponseBody
    public String logClientError(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception{
        JSONObject result = new JSONObject();
        try{
            String errorObj = request.getParameter("list");
            JSONArray errors = new JSONArray(errorObj);
            some more code here which loops through the list...

            result.put("isSuccess", true);
            return result.toString();
        }catch(JSONException e){
            result.put("isSuccess", false);
            return result.toString();
        }
    }

简而言之,我通过传递查询字符串参数来发出发布请求。这是正确的方式还是应该将内容发布在正文中?如果我在正文中发布,我必须进行哪些更改?

【问题讨论】:

  • 是的,谢谢。它确实给了我一个想法

标签: javascript java json spring rest


【解决方案1】:

这绝对不是您应该将数据发布到 REST 端点的方式。采用这种方式,您可以使用 GET 而不是 POST,它也可以正常工作。但是 POST 绝对应该用于创建新资源,并且内容应该在消息体中携带,而不是作为查询参数。

在后端,您可以自己捕获和解析内容或创建一个类(见下文),该类将填充来自正文的数据。

DTO:

class Person {
    String name
    Integer age
}

class PersonList {
    List<Person> persons
}

端点:

public String logClientError(@RequestBody PersonList list, HttpServletRequest request, HttpServletResponse response) throws Exception

正文:

{ 
   "persons": [{name:"abc",age:23},{name:"xyz",age:22},{name:"xcx",age:33}] 
}

@ResponseBody 可以以相同的方式用于响应。

【讨论】:

    最近更新 更多