【问题标题】:Spring Response\Request body templatesSpring Response\Request 正文模板
【发布时间】:2021-11-08 05:27:30
【问题描述】:

让我解释一个问题。假设我有一个实体类User

public class User {
  private UUID id;
  private String login;
  private String password;
  private String firstName;
  private String lastName;
  private String email;
  private int age;
  // ... more fields and default getters and setters
}

另外,我还有两个 DTO 类:

public class UserLogin {
  private UUID id;
  private String login;
  // ... getters and setters
}

public class UserLoginEmail {
  private UUID id;
  private String login;
  private String email;
  // ... getters and setters
}

让我们看一下以UserLoginEmail 作为请求正文和UserLogin 作为响应正文的类UserController

@RestController("/users")
public class UserController {

  @PutMapping
  public UserLogin someRequest(UserLoginEmail user) {
      // ...
  }

}

在 Spring Boot 中创建某种projections 的最佳方法是什么?我可以创建一个包含必填字段的接口,然后将它们作为参数(或其他方式)放入 Java 方法中吗?我想在我的代码中以最少的精力和敏捷的方式构建 DTO 类。

【问题讨论】:

    标签: spring-boot spring-data-rest


    【解决方案1】:

    您可以将 JSON 视图与 Jackson 一起使用,您可以使用它在每个端点上定义不同的视图(查看https://www.baeldung.com/jackson-json-view-annotation 了解更多详细信息)。

    但在你的情况下,我不会那样做。您的一个 DTO 是请求,另一个是响应,因此您不应将它们混合在一个 DTO 中。更重要的是,我不太喜欢 JSON 视图,因为它们很难理解并且代码变得更难阅读。抽象和代码可重用性通常很好,但它使代码更难阅读,对于 DTO 的情况,我更喜欢明确并拥有多个 DTO,即使它们相似。使用这种方法,您可以轻松更改其中一个 DTO 而不会影响其他任何内容,而以任何方式重用它们时都不会发生这种情况。

    话虽如此,保留两个 DTO,但我会重命名它们:UserLoginRequestUserLoginResponse

    【讨论】:

    • 我明白了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多