RESTful put id和body

时间:2016-07-31 06:51:39

标签: java json rest put

我需要让我的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,但它总是返回“资源不可用”错误。

我觉得这里有一些我很遗憾的东西?

2 个答案:

答案 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){
相关问题