有时,在为Web应用程序设计RESTful API时,使用Spring MVC自动对象-JSON转换功能非常方便。要使用此功能,需要定义一个将被序列化的自定义类。
考虑以下代码段:
@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;
}
}
我的问题是,直接在端点类中定义这些“响应”类是个好主意,还是为此类创建单独的文件更好?请记住,除单元测试之外,任何其他终结点都没有使用 AuthResponse 对象。
答案 0 :(得分:1)
在现实生活中的项目中,您需要将来自业务层的模型映射到表示层模型(在您的情况下为AuthResponse
)。此映射应该经过单元测试,并且为了在测试中访问AuthResponse
,您需要在通过import <package_name>.ClientLogin.AuthResponse
的导入中指定ClientLogin控制器。我建议您使代码尽可能地分离。
答案 1 :(得分:0)
如果您考虑这些DTO的责任和范围,这些仅在Controller类中使用。
不应在该类之外的任何地方使用Response DTO(请求DTO也是一样)。
在这种情况下,将它们用作Controller的静态内部类不仅是“好”的,而且是完全合理的。
话虽这么说,它们应该不是public
(正如我们刚才谈到的范围),并且也不需要它们是程序包私有的,它们可以(并且应该)是{ {1}}类。