为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Qyouu 2021-10-13 16:17:56
有人告诉我,在构建 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"}
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

/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 来处理输出和输入情况。


查看完整回答
反对 回复 2021-10-13
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您应该使用这三个属性(userloginid、propertyname、propertyid)创建相同的 DTO 。但是您必须考虑到propertyid可以为null。然后在发送请求参数时,如果没有发送propertyid,解析器会创建一个propertyid=null的DTO实例;否则解析器将创建一个带有propertyid=value_passed_in 参数的 DTO 实例。


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信