Вызвано: не удается создать экземпляр `org.springframework.security.core.userdetails.Пользовательские данные` (не существует создателей, таких как конструктор по умолчанию)

#spring-boot #spring-security #microservices #resttemplate #netflix-zuul

#весенняя загрузка. #весна-безопасность #микросервисы #resttemplate #netflix-zuul

Вопрос:

Я пытаюсь вызвать внешний микросервис с помощью RestTemplate. Но это сбой, потому что я использую UserDetails.class как responseType. Я знаю, что UserDetails — это интерфейс, и он не может быть сконструирован. Но я пробовал и с пользовательскими классами, Даже я пробовал сUser.class вместо UserDetails.class . но это не сработало. Пожалуйста, смотрите пример ниже:

Имя API zuul-service

 UserDetails userDetails = restTemplate.getForObject("http://localhost:8001/login/getUserDetails?username="   userName, UserDetails.class);
  

и это то, что я пытаюсь вызвать:
Имя API login-service

 @GetMapping("/login/getUserDetails")
public ResponseEntity<UserDetails> getUSerDetails(@Param("username") String username) throws Exception 

{
        LOGGER.info("Start getUSerDetails::LoginController "   username);

        final Login userDetails = loginUserDetailsService.loadUserByUsername(username);

        LOGGER.info("Start getUSerDetails::LoginController "   userDetails.getUsername());


        return ResponseEntity.ok(new User(userDetails.getUsername(), userDetails.getPassword(), new ArrayList<>()));
}
  

Я не знаю, что мне следует попробовать сейчас и как это будет работать. Пожалуйста, помогите мне в этом.

Комментарии:

1. ваша служба в path /login/getUserDetails возвращает ResponseEntity пользователя, поэтому для получения ответа вам следует использовать пользовательский класс, и он должен содержать конструктор по умолчанию!

Ответ №1:

наконец, ваш код должен быть похож:

 UserDetails userDetails = (User) restTemplate.getForObject("http://localhost:8001/login/getUserDetails?username="   userName, User.class);