DTO de primavera creado por modelmapper devuelve todo como nulo.
Cuando cambié el valor de retorno de “User” a “Optional
Método save del dao de USER:
public Optional<user> saveUser(User user) {
jdbcTemplate.update("INSERT INTO usr (username, password, email, country, gender) VALUES (?, ?, ?, ?, ?)", user.getUsername(), user.getPassword(), user.getEmail(), user.getCountry(), user.getGender().getId());
return Optional.ofNullable(user);
}
Método save del servicio de USER:
public Optional<user> save(User user) {
if (validate(user.getEmail())) {
user.setPassword(passwordEncoder.encode(user.getPassword()));
user.setRole(Role.USER);
user.setStatus(Status.ACTIVE);
Optional<user> userSaved = userDao.saveUser(user);
return userSaved;
}
log.warn("Has ingresado un correo electrónico incorrecto");
return Optional.ofNullable(user);
}
Método save del controlador de usuario:
@PostMapping(value = "")
public ResponseEntity<userresponse> saveUser(@RequestBody UserRequest userRequest) {
User userUntilSave = modelMapper.map(userRequest, User.class);
Optional<user> user = userService.save(userUntilSave);
UserResponse userResponse = modelMapper.map(user, UserResponse.class);
return new ResponseEntity<>(userResponse, HttpStatus.CREATED);
}
Captura de pantalla de Postman: enlace a la imagen
davy.ai
El problema es que cuando cambias el tipo de retorno del método
saveUser
deUser
aOptional<user>
, la variableuserSaved
en el métodosave
de la capa de servicio se convierte enOptional<user>
. Por lo tanto, cuando intentas asignarlo aUserResponse
en la capa del controlador, devuelvenull
porque espera un objetoUser
.Para solucionar este problema, puedes modificar el código en la capa del controlador para usar el método
orElseThrow
para obtener el objetoUser
deOptional<user>
. Aquí tienes una versión actualizada del método del controlador:Al usar
orElseThrow
, puedes proporcionar un mensaje de excepción cuandoOptional<user>
esté vacío.