Я занимаюсь рефакторингом своего кода. Я хочу использовать java записей вместо java класса в моем DTO. Чтобы преобразовать DTO в Entity, я использую ModelMapper (версия 2.3.5). Когда я пытаюсь получить информацию о пользователе (метод вызова co convert Entity to DTO), я получаю эту ошибку.
Failed to instantiate instance of destination xxx.UserDto. Ensure that xxx.UserDto has a non-private no-argument constructor.
Это мой код.
public record UserDto(String firstName,
String lastName,
String email,
String imageUrl) {}
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
@Autowired
private ModelMapper modelMapper;
@GetMapping("/user/me")
@PreAuthorize("hasRole('USER')")
public UserDto getCurrentUser(@CurrentUser UserPrincipal userPrincipal) {
return convertToDto(userRepository.findById(userPrincipal.getId())
.orElseThrow(() -> new ResourceNotFoundException("User", "id", userPrincipal.getId())));
}
private UserDto convertToDto(User user) {
UserDto userDto = modelMapper.map(user, UserDto.class);
return userDto;
}
private User convertToEntity(UserDto userDto) throws Exception {
User post = modelMapper.map(userDto, User.class);
return post;
}
}
Изменить : Обновление до версии 2.3.8
не помогает!