【问题标题】:Are nested static classes similar to non-static classes for REST request-body?嵌套的静态类是否类似于 REST 请求体的非静态类?
【发布时间】:2022-01-17 15:23:42
【问题描述】:

我正在使用 Spring Boot 来设计 REST API。我想知道在请求正文中使用嵌套类会有什么不同?

REST 端点:

@PostMapping("/create")
public void (@RequestBody RequestData.UserDetails details) {}

我的 RequestData 类:

public class RequestData {
  public static final class UserDetails {
     private String name;
  }
}

所以我的问题是以下哪个类定义是安全的?

  1. 为 UserDetails 创建一个单独的类以获取请求的数据
  2. 如上所述创建嵌套类

嵌套类会在多个并发请求期间或以其他方式影响吗?

【问题讨论】:

    标签: java spring spring-boot rest spring-restcontroller


    【解决方案1】:

    嵌套类会在多个并发请求期间或以其他方式影响吗?

    不,请求正文将映射到 RequestData.UserDetails 的实例,如果是单独的类,则仅映射到 UserDetails。如果您不将此实例作为类属性存储在控制器、服务等中,则不会出现并发请求问题,因为对控制器的每个请求都有自己的此类实例,多线程不是问题因为你没有存储状态。

    这意味着拥有一个嵌套类或一个单独的类与您是否拥有线程安全的控制器、服务等这一事实无关。重要的是不要在它们上存储状态。

    在这种情况下,拥有一个嵌套类或一个单独的类更多的是品味和组织问题。

    【讨论】:

    • 感谢您的回复@joão-dias。你说不要在他们身上存储状态。我的嵌套类的所有字段都标记为 final,该类本身也是静态的 final,只有 getter 方法,没有 setter 方法。这会使我的班级无国籍吗?您还说拥有嵌套类或单独的类更多的是品味和组织问题?我想知道你喜欢什么?单独类还是嵌套类?
    • 无状态的东西与控制器和服务相关(不应在其中存储任何状态)。对于您的 POJO,一个重要特性是不可变,因为可变它们容易出错(请查看 baeldung.com/java-immutable-object)。我会让他们在一个单独的班级,但话又说回来,那只是我。我也可以使用嵌套类的代码。
    • 很好地解释了一切。它消除了我对嵌套类的所有疑虑。感谢您的回复@joão-dias
    • 不客气@JulieTheCoder!
    猜你喜欢
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多