mercredi 9 août 2017

Builder pattern on RequestBody

I have been developing spring boot rest api service, this is one of my rest controller method:

 @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;

    }

Manager controller it's the validator class(for example check email on null reference)

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);
            }
        }

After validation of data i call 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();
        }

My qustion is, i pass a lot of params into methods(name,surname,email,password etc) if i change the order , i will save wrong params into db. The first decision is to pass Manager object instead of manager params. But in this case i will have the following scenario:

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();
        }

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

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?

Aucun commentaire:

Enregistrer un commentaire