У меня есть пользовательский сеттер в моей Ломбок основе POJO:Использование пользовательских сеттер в строитель Ломбок
@Data
@Builder
public class User {
private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
private String password = null;
public void setPassword(String password) {
Assert.notNull(password);
this.password = ENCODER.encode(password);
}
, но когда я использую Ломбок генерироваться строитель:
User user = User.builder()
.password(password)
.build();
мой пользовательский сеттер не вызывается , и поэтому пароль не закодирован. Меня это огорчает.
Мой заказ сеттер, конечно, вызывается, когда я использую его непосредственно:
public void changePassword(String password, User user) {
user.setPassword(password);
}
Что я могу сделать, чтобы строитель Ломбок использовать свой собственный сеттер?
Спасибо, ** chrylis ** - но как 'Person :: setPassword' (от Ломбок' @ Data') и 'Person.PersonBuilder :: password' разделяют Сухая реализация? –
@JanNielsen Вы действительно не можете - точка «Builder» должна препопылять все данные. Часто, фактически, он используется с неизменным классом. Вы можете рассмотреть подход «конструктор», вызывая 'this.setPassword()' из класса 'User' и игнорируя проблемы с кодированием целиком в построителе. – chrylis
@JanNielsen Чем больше я думаю об этом, тем больше, кажется, имеет смысл сделать вызывающего абонента ответственным за кодирование пароля. Слишком много происходит при кодировании в устройстве настройки свойств. Помимо прочего, вы не можете установить хешированный пароль без прямого доступа к полю. – chrylis