Skip to content

Instantly share code, notes, and snippets.

@susimsek
Last active August 10, 2024 17:55
Show Gist options
  • Select an option

  • Save susimsek/bf72960b8ca4b94134fcf10e05834c14 to your computer and use it in GitHub Desktop.

Select an option

Save susimsek/bf72960b8ca4b94134fcf10e05834c14 to your computer and use it in GitHub Desktop.
Spring Boot Mapstruct With Password Encoder
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class CreateUserRequestModel {
@NotBlank
@Size(min=2)
String firstName;
@Size(min=2)
String lastName;
@NotBlank
@Size(min=2,max = 16)
String password;
@NotBlank
@Email
String email;
}
@Qualifier // org.mapstruct.Qualifier
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
public @interface EncodedMapping {
}
@Configuration
public class PasswordEncoderConfig {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
@Component
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PasswordEncoderMapper {
final PasswordEncoder passwordEncoder;
@EncodedMapping
public String encode(String value) {
return passwordEncoder.encode(value);
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class UserDto implements Serializable {
String userId;
String firstName;
String lastName;
String password;
String email;
String encryptedPassword;
}
@Mapper(uses = PasswordEncoderMapper.class)
public interface UserMapper {
@Mapping(source = "password", target = "encryptedPassword", qualifiedBy = EncodedMapping.class)
UserDto createUserRequestModelToUserDto(CreateUserRequestModel userRequestModel);
}
@saymon-says
Copy link

This happen with you too?

I think it’s no longer relevant, but I’ll still write) the argument source is the model field, the argument target is the dto field. There you write your field names. If the names match, then just leave the target.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment