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