可以将 Spring MVC 响应 DTO 声明为静态嵌套 类 吗?
Is it okay to declare Spring MVC response DTOs as static nested classes?
有时在为您的 Web 应用程序设计 RESTful API 时使用 Spring MVC 自动对象-JSON 转换功能非常方便。要使用此功能,需要定义一个将被序列化的自定义 class。
考虑这段代码:
@RestController
public class ClientLogin {
@PostMapping("/auth/password")
public AuthResponse doPasswordLogin(@RequestParam String username, @RequestParam String password) {
...
return new AuthResponse("test username", "test accessToken", "test sessionToken");
}
@PostMapping("/auth/token")
public AuthResponse doTokenLogin(@RequestParam String username, @RequestParam String token) {
...
return new AuthResponse("test username", "test new accessToken", "test sessionToken");
}
@RequiredArgsConstructor
@Getter
public static class AuthResponse {
private final String username;
private final String accessToken;
private final String sessionToken;
}
}
我的问题是,直接在端点 classes 中定义这些 "response" classes 是个好主意,还是为此类创建单独的文件更好class是吗?请记住,除单元测试外,AuthResponse 对象未被任何其他端点使用。
在实际项目中,您需要将来自业务层的模型映射到表示层模型(在您的情况下是 AuthResponse
)。此映射应该经过单元测试,为了在测试中访问 AuthResponse
,您需要通过 import <package_name>.ClientLogin.AuthResponse
在导入中指定 ClientLogin 控制器。我建议您尽可能保持代码分离。
如果您考虑这些 DTO 的职责和范围,这些 DTO 仅在 Controller 中使用 class。
不应在 class 以外的任何地方使用响应 DTO(请求 DTO 也是如此)。
在那种情况下,不仅“可以”,而且完全有理由将它们用作控制器的静态内部 classes。
话虽这么说,他们应该 而不是 是 public
(正如我们刚刚谈到的范围),也不需要他们是包私有的,他们可以(并且应该) ) 是 private static
classes.
有时在为您的 Web 应用程序设计 RESTful API 时使用 Spring MVC 自动对象-JSON 转换功能非常方便。要使用此功能,需要定义一个将被序列化的自定义 class。
考虑这段代码:
@RestController
public class ClientLogin {
@PostMapping("/auth/password")
public AuthResponse doPasswordLogin(@RequestParam String username, @RequestParam String password) {
...
return new AuthResponse("test username", "test accessToken", "test sessionToken");
}
@PostMapping("/auth/token")
public AuthResponse doTokenLogin(@RequestParam String username, @RequestParam String token) {
...
return new AuthResponse("test username", "test new accessToken", "test sessionToken");
}
@RequiredArgsConstructor
@Getter
public static class AuthResponse {
private final String username;
private final String accessToken;
private final String sessionToken;
}
}
我的问题是,直接在端点 classes 中定义这些 "response" classes 是个好主意,还是为此类创建单独的文件更好class是吗?请记住,除单元测试外,AuthResponse 对象未被任何其他端点使用。
在实际项目中,您需要将来自业务层的模型映射到表示层模型(在您的情况下是 AuthResponse
)。此映射应该经过单元测试,为了在测试中访问 AuthResponse
,您需要通过 import <package_name>.ClientLogin.AuthResponse
在导入中指定 ClientLogin 控制器。我建议您尽可能保持代码分离。
如果您考虑这些 DTO 的职责和范围,这些 DTO 仅在 Controller 中使用 class。
不应在 class 以外的任何地方使用响应 DTO(请求 DTO 也是如此)。
在那种情况下,不仅“可以”,而且完全有理由将它们用作控制器的静态内部 classes。
话虽这么说,他们应该 而不是 是 public
(正如我们刚刚谈到的范围),也不需要他们是包私有的,他们可以(并且应该) ) 是 private static
classes.