#java #spring-boot #rest #merge #apache-commons-beanutils
Вопрос:
Я хотел бы реализовать операцию ОБНОВЛЕНИЯ (метод PUT) для REST api. Из интерфейсного приложения мой метод контроллера ожидает карту значений, например:
@PutMapping(value = "/profile")
public UserDto updateProfile(JwtAuthenticationToken jwtAuthenticationToken, @RequestBody Map<String, ?> userForm) {
...
}
Я хотел бы использовать map в качестве тела запроса, а не POJO, потому что с помощью opf map я могу объявить 3 состояния для каждого свойства:
- свойство отсутствует на карте — свойство не изменяется, не обновляйте свойство компонента
- свойство присутствует и не является нулевым — обновите свойство компонента со значением
- свойство присутствует и является нулевым — обновите свойство компонента с нулем
с POJO я не могу обработать #1 из приведенного выше списка — свойство всегда присутствует с нулевым или ненулевым значением
В моем методе обслуживания я должен объединить свойства с карты с моим User
объектом на основе 3 правил выше.
Конечно, я могу сделать это в своем пользовательском коде с API отражения, но ищу какой-то существующий интерфейс, который может помочь мне в этой задаче… какой-то
user = BeanUtils.merge(userForm, user);
Пожалуйста, сообщите, если таковые имеются.
Ответ №1:
Вы можете преобразовать свой User
объект в a Map
и работать следующим образом:
- преобразование
User
вMap
исходный объект - добавить все элементы в из
userForm
вoriginal
- преобразуйте оригинал в
User
класс - делайте то, что вам нужно, с обновленным пользователем
В основном код выглядит примерно так:
private ObjectMapper objectMapper;
...
public User merge(User originalUser, Map newUserMap) {
Map originalUserMap = objectMapper.convertValue(originalUser, Map.class);
originalUserMap.putAll(newUserMap);
return objectMapper.convertValue(originalUserMap, User.class);
}
...
User userAfterModifications = merge(user, userForm);
... // Do what you need with the updated user
Обратите внимание, что вы должны быть уверены, что реализация карты поддерживает нулевые значения.
Комментарии:
1. Спасибо! Это именно то, что мне нужно !