当您有多个方法调用但请求主体不同时,DTO 模式是什么?

有人告诉我,在构建 RestFul API 时,请使用名词而不是动词。我还被告知每个 DTO 都有自己的控制器。在“编辑属性”和“添加属性”方法需要两个不同的请求主体的情况下,我的 DTO 是什么样的?


@RestController

@RequestMapping(value = "/property")

public class PropertyController{


    @RequestMapping(method = RequestMethod.GET)

    //get properties method definition goes here


    @RequestMapping(method = RequestMethod.PUT)

    // edit property method definition goes here


    @RequestMapping(method = RequestMethod.POST)

    // add property method definition goes here

}

编辑属性要求:


{

    "userloginid": "3333",

    "propertyname": "My edited property name",

    "propertyid": "1"

}

添加属性需要:


{

    "userloginid": "3333",

    "propertyname": "My new property name"

}


Qyouu
浏览 167回答 3
3回答

慕容708150

/users/{loginid}/properties/{propertyid} - 请考虑这个端点,因为它更符合 RESTful对于 PUT 更新,您可以考虑上面的端点,userloginid并propertyid从路径变量中获取和。在 PUT 请求中,PUT /users/3333/properties/1我将发送以下请求正文:{    "propertyname": "My edited property name"}对于创建新属性的 POST 请求,我会考虑/users/{loginid}/properties/使用相同的请求正文结构向此 URL 发送请求:{    "propertyname": "My new property name"}正如您所看到的,我没有在 POST 请求中发送任何 ID,因为存储对象的 ID 生成应该发生在 DAO 中。客户端将在响应正文中收到创建/更新属性的 ID:{    "propertyname": "My updated/created property name",    "propertyid": "1"}因此,从上面的示例中,我将创建两个 DTO 来处理输出和输入情况。

牛魔王的故事

您应该使用这三个属性(userloginid、propertyname、propertyid)创建相同的 DTO 。但是您必须考虑到propertyid可以为null。然后在发送请求参数时,如果没有发送propertyid,解析器会创建一个propertyid=null的DTO实例;否则解析器将创建一个带有propertyid=value_passed_in 参数的 DTO 实例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java