Java 无法从Spring boot到angular 6服务的RestController检索对象

Java 无法从Spring boot到angular 6服务的RestController检索对象,java,angular,spring,spring-boot,Java,Angular,Spring,Spring Boot,我有下面的代码片段 我的休息控制器: @RestController @RequestMapping("/hello") public class HelloController{ @RequestMapping(method = RequestMethod.GET, path="getUser") public UserDetails getUserDetails(){ return userdetails; }

我有下面的代码片段

我的休息控制器:

    @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;
    }

调用将转到controller(我在调试模式下选中),但无法获得对angular的响应(userdetails未定义)

请确保使用与服务中相同的变量类型:

UserDetails.ts
    export class UserDetails {
        name: string;
        role: string;
    }
还应尝试在调用中使用泛型以确保类型兼容性:

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

确保使用与服务中相同的变量类型:

UserDetails.ts
    export class UserDetails {
        name: string;
        role: string;
    }
还应尝试在调用中使用泛型以确保类型兼容性:

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

您应该在get方法中明确指定类型,您可以订阅数据,如下所示,还可以按以下方式使用subscribe。在java中指定具有相同数据类型的UserDetails文件

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

您应该在get方法中明确指定类型,您可以订阅数据,如下所示,还可以按以下方式使用subscribe。在java中指定具有相同数据类型的UserDetails文件

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

我已经修改了我的UserDetails文件,但很抱歉我的错误,我忘了在服务调用中映射
this.http.get(
${this.baseUrl}
).map((res:UserDetails)=>res)

我已经修改了我的UserDetails文件,但是很抱歉,我的错误,我忘记了在服务调用中映射
this.http.get(
${this.baseUrl}
).map((res:UserDetails)=>res)

您启用了CORS吗?是的,我启用了1。尝试从postman调用rest服务并在
${this.baseUrl}替换相同的url
。看看你是否会得到?2.如果你仍然没有得到定义,请使用承诺。为什么在你的java代码中你有sting角色和angular number?据我所知,这些数据类型也应该是相同的,你启用了CORS吗?是的,我启用了1。试着从postman调用rest服务,并在
${this.baseUrl}替换相同的url
。看看你是否会得到?2.如果你仍然没有得到定义,请使用承诺。为什么在你的java代码中你有sting角色和angular number?据我所知,这些数据类型也应该是相同的,仍然没有得到。你是否修改了你的UserDetails文件?你是否在你的spring boot方法中添加了@CrossOrigin注释controller仍然无法获取您是否修改了UserDetails文件?是否在controller中的spring引导方法中添加了@CrossOrigin注释