gpt4 book ai didi

java - RequestBody 上的构建器模式

转载 作者:行者123 更新时间:2023-12-02 02:40:21 27 4
gpt4 key购买 nike

我一直在开发 Spring Boot Rest api 服务,这是我的 Rest Controller 方法之一:

 @RequestMapping(value = "manager", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")
@ResponseBody
public String updateManager(@RequestBody Managers manager,
@RequestParam(value = "sid", required = true, defaultValue = "") String sid) throws TimeoutException, SocketTimeoutException, SocketException {

final Integer managerId = checkSession(sid);
final String result = managerController.validateManagerData(managerId, manager.getName(), manager.getSurname(), manager.getPassword());
return result;

}

管理器 Controller ,它是 validator 类(例如检查空引用的电子邮件)

if (name != null) {
if (!GMoikaStringUtils.isValidStringLength(50, name)) {
throw new InvalidUserInputException("Wrong name format", CLASS_NAME, "validateManagerData", params);
}
}
if (surname != null) {
if (!GMoikaStringUtils.isValidStringLength(50, surname)) {
throw new InvalidUserInputException("Wrong surname format", CLASS_NAME, "validateManagerData", params);
}
}

验证数据后,我调用Manager服务类

public JsonObject updateManager(Integer managerId, String name, String surname, String password) {
Managers manager = managerRepository.findOne(managerId);
if (name != null) {
manager.setName(name);
}
if (surname != null) {
manager.setSurname(surname);
}
if (password != null) {
manager.setPassword(password);
}
managerRepository.save(manager);
return manager.toJson();
}

我的问题是,我将很多参数传递给方法(姓名,姓氏,电子邮件,密码等),如果我更改顺序,我会将错误的参数保存到数据库中。第一个决定是传递 Manager 对象而不是管理器参数。但在这种情况下我会遇到以下情况:

public JsonObject updateManager(Integer managerId,Managers manager2) {
Managers manager = managerRepository.findOne(managerId);
if (manager2.name != null) {
manager.setName(name);
}
if (manager2.surname != null) {
manager.setSurname(surname);
}
if (manager2.password != null) {
manager.setPassword(password);
}
managerRepository.save(manager);
return manager.toJson();
}

两个管理者采用一种方法。看起来很难理解应该将哪一个保存到数据库中

第二个决定是使用 Builder 模式(BP),但我不知道将 BP 与 ORM 结合使用是否是一个好的实践以及如何做得更好?

最佳答案

首先,managers 实体应该是manager。保留单数 from 来表示一个类,其中一个实例表示一个单独的“事物”。

Two managers in one method . It's look like difficul to understand which one should be saved into db

对于参数的命名过于通用,是的:

public JsonObject updateManager(Integer managerId, Manager manager2) {

只要更具体一点,应该没问题:

public JsonObject updateManager(Integer managerId, Manager managerDataToSave) {

或者,如果它可能更有意义,请引入一个自定义类以使其更加具体:

例如:ManagerInfoToUpdate 将包含要更新的信息(姓名、电子邮件等)。

并以这种方式使用它:

public JsonObject updateManager(Integer managerId, Manager ManagerInfoToUpdate) {

The second decision is to use Builder pattern(BP), but i don't know is it good practise to use BP with ORM and how to do it better?

ORM(例如Hibernate)使用反射来创建实体实例。因此,它需要一个无参数构造函数。
它违背了构建器模式的目的。
您可能不应该将它用于 Hibernate 实体。

关于java - RequestBody 上的构建器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45590748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com