#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);