Не удается извлечь объекты из RestController Spring boot в службу angular 6

#java #angular #spring #spring-boot

#java #angular #spring #spring-boot

Вопрос:

У меня есть приведенный ниже фрагмент кода

Мой контроллер Rest:

     @RestController
    @RequestMapping("/hello")
    public class HelloController{
      @RequestMapping(method = RequestMethod.GET, path="getUser")
      public UserDetails getUserDetails(){
        return userdetails;
      }
    }
  

Объект модели

     Public Class UserDetails{
       public String name;
       public String role;
    //getters and setters go here

    }
  

угловой код
appcomponent.ts

     baseUrl = "/hello"
    userdetails: UserDetails;

    this.http.get(`${this.baseUrl}`).subscribe((data : any) => 
         this.userdetails = data);
    console.log(this.userdetails);
  

UserDetails.ts

     export class UserDetails {
        name: string;
        role: number;
    }
  

вызов отправляется на контроллер (я проверил в режиме отладки), но не может получить ответ на angular (пользовательские данные отображаются как неопределенные)

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

1. вы включили CORS?

2. Да, я включил

3. 1. попробуйте вызвать службу rest из postman и заменить тот же URL на ${this.baseUrl} .посмотрите, получите ли вы или нет? 2. если вы все еще получаете undefined, используйте promises.

4. почему в вашем Java-коде у вас есть роль sting и в angular number? . из того, что я знаю, эти типы данных также должны быть одинаковыми,

Ответ №1:

Убедитесь, что вы используете те же типы для переменных, что и в службе:

 UserDetails.ts
    export class UserDetails {
        name: string;
        role: string;
    }
  

Также попробуйте использовать общие элементы в вашем вызове, чтобы обеспечить совместимость типов:

 this.http.get<UserDetails>(`${this.baseUrl}`).subscribe((data : UserDetails)
  

Ответ №2:

У вас должен быть явно указанный тип в методе get, и вы можете подписаться на данные, как показано ниже, а также использовать subscribe указанным ниже способом. У вашего файла UserDetails есть тот же тип данных, который указан в Java

 this.http.get<UserDetails>(this.baseURL).subscribe(
  data => {
    this.userDetails= data;
    console.log(this.userDetails.name);
    console.log(this.userDetails.role);
  }
);
  

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

1. Все еще не получается

2. Вы изменили свой файл UserDetails? и добавили ли вы аннотацию @CrossOrigin в свой метод spring boot в controller

Ответ №3:

Я изменил свой файл пользовательских данных, но, к сожалению, я забыл сопоставить в вызове службы this.http.get( ${this.baseUrl} ).map((res: пользовательские данные) => res)