java - 创建、更新和获取其余端点中的相同/不同 DTO 对象?

标签 java rest spring-mvc dto content-negotiation

考虑遵循 UserDTO 类和 UserController 公开端点以创建、更新和获取用户。

在 UserDTO 类中拥有 id 属性对于创建和更新没有意义。如果我使用 swagger 或其他自动生成的 API 文档,那么它表明可以在创建端点中传递 id。但系统不使用它,因为 ID 是在内部生成的。

如果我查看 get,那么我可能可以去掉 id 属性,但它在列表用户端点中肯定是必需的。

我正在考虑在获取/列表端点返回内部用户域对象。这样我就可以从 UserDTO 类中删除 id 属性。

为此我可以采用更好的选择吗?

public class UserDTO {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@RestController
@RequestMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<Void> create(@RequestBody UserDTO user) {
    }

    @RequestMapping(value = "{id}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<UserDTO> get(@PathVariable("id") int id) {
    }

    @RequestMapping(value = "{id}", method = RequestMethod.PUT)
    @ResponseBody
    public ResponseEntity<Void> update(@PathVariable("id") int id, @RequestBody UserDTO user) {
    }
}

这个问题可能有人问过,但我找不到。所以请原谅我重复的问题。

最佳答案

Data Transfer Object (DTO) 是一种以明确定义的目的创建的模式:将数据传输到远程接口(interface),就像网络服务一样。这种模式非常适合 REST API,从长远来看,DTO 将为您提供更多灵 active

一旦 REST 资源表示不需要具有与持久性对象相同的属性,我建议为您的端点使用定制的类。

为避免样板代码,您可以使用映射框架,例如 MapStruct将您的 REST API DTO 从/映射到您的持久性对象。

有关在 REST API 中使用 DTO 的好处的详细信息,请查看以下答案:

要给您的 DTO 起更好的名字,请检查以下答案:

关于java - 创建、更新和获取其余端点中的相同/不同 DTO 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990971/

相关文章:

java - 错误: Installation did not succeed.应用程序无法安装在Android Studio中

java - 同步块(synchronized block)中的 HashMap 与 Collections.synchronizedMap() 之间有什么区别?

java - oauth2 的 Spring Security 向授权 URL 添加附加参数?

spring - 添加编码到@GetMapping

forms - Spring MVC 自定义编辑器和选择选项性能不佳

java - Bottom Sheet 展开时最小化带有动画的底部导航栏

JavaFX:用键盘突然移动矩形会导致矩形变为 "stuck"

rest - 解析(解析服务器): Code 111 Schema mismatch when trying to add Relation using REST API

java - spring mvc 中的 org.springframework.dao.QueryTimeoutException

javascript - 网站和移动应用程序的登录 API 应该相同还是不同?