我需要让我的Java服务器接收一个PUT请求来从id和json主体创建一个新用户,URI需要像:
/usermanagement/user/$id { "name":john, "type":admin }
鉴于我已经制作了一个简单的Java类,以后可以使用Jackson将JSON转换为POJO,这是我的问题: 如何指定PUT请求以接受id和JSON主体作为参数?到目前为止我已经:
@PUT
@Path("{id}")
@Consumes(MediaType.APPLICATION_JSON)
public String createUser(@PathParam("id") int id){
User user = new User();
User.setId(id);
return SUCCESS_MSG;
}
这样可行,但我没有运气添加JSON主体并让函数解析它。我试过了:
public String createUser(@PathParam("id") int id, String body){
return body;
}
在Postman中测试时应返回相同的输入JSON,但它总是返回“资源不可用”错误。
我觉得这里有一些我很遗憾的东西?
答案 0 :(得分:1)
根据REST API约定,需要在/ usermanagement / users之类的uri上使用POST方法。 PUT方法用于更新现有资源。您可以阅读这篇关于如何设计实用RESTful API的精彩文章。 http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
如果您正在尝试创建新用户,为什么要为其提供ID?您必须发布用户名,姓氏,电子邮件等数据,并让后端为此新资源生成ID(如自动递增的ID或某些UUUID)。
例如,在我的应用程序中,我使用json正文作为POST请求,如下所示:
{
"loginId": "ravi.sharma",
"firstName": "Ravi",
"lastName": "Sharma",
"email": "myemail@email.com",
"contactNo": "919100000001",
"..." : ".."
}
此外,您的响应应在成功创建后返回HTTP-201,并且它应包含指向新创建的资源的位置标头。
答案 1 :(得分:0)
使用带有成员变量名称和类型的类来代替使用String主体。
public class User {
private String name;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
(这适用于Spring Boot Web开箱即用。如果是Spring MVC,你可能需要添加Jackson依赖项):在你的Controller上,添加@RequestBody Annotation,然后Jackson将负责编组用户对象的JSON字符串。
public String createUser(@PathParam("id") int id, @RequestBody User user){