无法在Spring 4中向POST Service发送数据

时间:2017-09-30 17:11:35

标签: java spring rest post

我尝试使用Spring 4编写一个简单的HTTP REST服务。

我很难将数据发送到POST端点

@RequestMapping(value = "/onlyPost", produces = "application/json", method 
= RequestMethod.POST)
public @ResponseBody ResponseEntity<?> createUser(@RequestParam("value1") 
String param1, @RequestParam("value2") String param2) {
....
}

在尝试使用Postman发送数据时,我收到了400条消息(显然这些值是在请求的正文中设置的)

"message": "Required String parameter 'value1' is not present",

我注意到这个问题与标题有些关联,因为当我删除邮递员的标题( Content-Type:application / json )时,一切正常。< / p>

我尝试了一个多小时,自己解决这个问题没有结果。任何提示?

2 个答案:

答案 0 :(得分:1)

当您的请求格式错误(即缺少必需的请求参数)

时,会返回

HTTP 400

@RequestParam用于网址参与,如果你想这样传递它们,你可以打电话 <api_url>/onlyPost?value1=<value1>&value2=<value2> 但是......如果你想创建用户,你应该使用@RequestBody并将你的用户数据放在那里。这样的事情:

@RequestMapping(value = "/users", produces = "application/json", method 
= RequestMethod.POST) 
public @ResponseBody ResponseEntity<?> createUser(@RequestBody User user) {
    [...]
}

如果你正在创建REST api,你应该使用具体的端点,这里有一些非常酷的阅读提示:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

答案 1 :(得分:1)

@RequestParam用于读取URL查询参数。

http://localhost:8080/springmvc/onlyPost?value1=foo&value2=bar

例如,在上面的网址中,value1value2是您可以使用该注释阅读的查询参数。

但是如果您想要读取JSON请求,则需要将方法更改为:

@RequestMapping(value = "/onlyPost", method = RequestMethod.POST, 
    consumes = "application/json")
public @ResponseBody ResponseEntity<?> createUser(@RequestBody User user) {
    ....
}

其中User是持有两个字段的POJO:

public class User {
    private String value1;
    private String value2;

    // getters and setters...
}