我尝试使用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>
我尝试了一个多小时,自己解决这个问题没有结果。任何提示?
答案 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
例如,在上面的网址中,value1
和value2
是您可以使用该注释阅读的查询参数。
但是如果您想要读取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...
}