我一直在开发spring boot rest api服务,这是我的其他控制器方法之一:
@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;
}
管理器控制器它是验证器类(例如,检查空引用上的电子邮件)
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 service class
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对象而不是manager params。 但在这种情况下,我将有以下情况:
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();
}
一种方法中的两位经理。看起来难以理解应将哪一个保存到db
中第二个决定是使用Builder模式(BP),但我不知道将BP与ORM一起使用以及如何更好地使用它是一种好的做法?
答案 0 :(得分:2)
首先,managers
实体应为manager
。
保持单数表示一个实例代表个体“事物”的类。
一种方法中的两位经理。这看起来很困难 哪一个应该保存到db
对于参数的通用命名,是:
public JsonObject updateManager(Integer managerId, Manager manager2) {
更具体一点,它应该没问题:
public JsonObject updateManager(Integer managerId, Manager managerDataToSave) {
或者如果它更有意义,请引入一个更具体的自定义类:
例如:ManagerInfoToUpdate
将包含要更新的信息(姓名,姓名,电子邮件等)。
以这种方式使用它:
public JsonObject updateManager(Integer managerId, Manager ManagerInfoToUpdate) {
第二个决定是使用Builder模式(BP),但我不知道是 将BP与ORM结合使用以及如何更好地实施它是一种很好的做法?
ORM,例如Hibernate使用反射来创建实体实例。因此,它需要一个无参数构造函数。
它违背了Builder模式的目的
您可能不应该将它用于Hibernate实体。