Я борюсь с обновлением формы.Пожалуйста, рассмотрите этот пример:
// Entity with which I need to perform CRUD operations
public class User {
private String name;
private String email;
private String phone;
private String address;
}
Я отправляю в пользовательский интерфейс UserDTO:
public class UserDTO {
private String name;
private ContactDataDTO contactDataDTO;
}
public class ContactDataDTO {
private String email;
private String phone;
private String address;
}
Мой маппер:
@Mapper
public interface UserMapper {
@Mappings({
@Mapping(source="email", target="contactDataDTO.email"),
@Mapping(source="phone", target="contactDataDTO.phone"),
@Mapping(source="address", target="contactDataDTO.address")
})
UserDTO userToUserDTO(User user);
@InheritInverseConfiguration
User updateUserFromUserDTO(UserDTO userDTO, @MappingTarget User user);
}
userToUserDTO () работает как положено, носгенерированный userDTOToUser () для меня кажется странным:
@Override
public User updateUserFromUserDTO(UserDTO userDTO, User user) {
if ( userDTO == null ) {
return null;
}
String address = userDTOContactDataDTOAddress( userDTO );
if ( address != null ) {
user.setAddress( address );
}
String phone = userDTOContactDataDTOPhone( userDTO );
if ( phone != null ) {
user.setPhone( phone );
}
String email = userDTOContactDataDTOEmail( userDTO );
if ( email != null ) {
user.setEmail( email );
}
user.setName( userDTO.getName() );
return user;
}
Проблемный вариант использования:
- Заполните все поля для пользователя.
- Снова откройте формуи очистить поле телефона.
- Это означает, что для бэкенда я отправлю что-то вроде этого:
userDTO: {
name: 'John Doe';
contactDataDTO: {
email: 'johndoe@gmail.com',
phone: null,
address: 'Home'
}
}
Итак, user.phone не будет обновляться, насколько это возможно.поскольку у меня есть нулевая проверка для этого в генерируемом коде
Я думал, что NullValueCheckStrategy - это то, что мне нужно, но нет варианта, который подходит мне.На данный момент единственный вариант, который я вижу, - написать свою собственную реализацию userDTOToUser () без нулевых проверок.Может быть, вы можете посоветовать лучшее решение, потому что для меня это выглядит как проблема, которая может возникнуть в любом картографе для целевого обновления из DTO с не примитивным источником.
Runnable demo: https://repl.it/@aksankin/SlateblueUnimportantStack
Большое спасибо.