Java 显示HashMap<;字符串,对象>;在从Rest API接收的Angular6中

Java 显示HashMap<;字符串,对象>;在从Rest API接收的Angular6中,java,angular,spring,rest,Java,Angular,Spring,Rest,我试图显示从我的控制器收到的HashMap的内容,但是我得到了一个空映射 这是我的控制器: @PostMapping(value = "getAllUsers") public HashMap<String, Object> getAllUsers(@RequestBody String s) { List<User> list = userRepository.getAll(s); HashMap<String, Object> userL

我试图显示从我的控制器收到的HashMap的内容,但是我得到了一个空映射

这是我的控制器:

@PostMapping(value = "getAllUsers")
public HashMap<String, Object> getAllUsers(@RequestBody String s)
{
    List<User> list = userRepository.getAll(s);

    HashMap<String, Object> userList = new HashMap<String, Object>();
    userList.put("list", list);
    userList.put("total", list.size());

    return userList;
}
这是我的api服务:

let URL = "api/v1";
getUsers(country: String): Observable<any> {
    return this.http.post(URL + "getAllUsers", country);
}
let URL=“api/v1”;
getUsers(国家/地区:字符串):可观察{
返回this.http.post(URL+“getAllUsers”,国家/地区);
}

我想知道如何操作和迭代从控制器接收的HashMap。提前谢谢。

Typescript将响应假定为
any
类型的
对象,而不是
映射
,因此请尝试以下操作:

Object.entries(data).forEach((value: string, key: string) => { 
      console.log(key, value);
});

Typescript假设响应是
any
类型的
对象,而不是
映射
,因此请尝试以下操作:

Object.entries(data).forEach((value: string, key: string) => { 
      console.log(key, value);
});

您正在执行
POST
请求,但是在您的用例中,您应该使用
GET
http方法来检索资源
POST
http方法用于添加资源。您必须更改控制器才能使用
@GetMapping()

@GetMapping(“/getAllUsers”)
公共HashMap getAllUsers(@PathVariable字符串s)
{
List List=userRepository.getAll;
HashMap userList=新建HashMap();
userList.put(“list”,list);
userList.put(“total”,list.size());
返回用户列表;
}
您还应该将该控制器的参数从
@RequestBody
更改为
@PathVariable

@PathVariable
注释用于将URI变量绑定到方法 参数

@RequestBody
注释绑定发送进来的内容(POST/PUT) 带注释变量的请求正文。(通常,您只能使用 @可包含“正文”内容的请求的RequestBody,例如POST 或者说


您可以阅读HTTP方法。

您正在执行
POST
请求,但在您的用例中,您应该使用
GET
HTTP方法来检索资源
POST
http方法用于添加资源。您必须更改控制器才能使用
@GetMapping()

@GetMapping(“/getAllUsers”)
公共HashMap getAllUsers(@PathVariable字符串s)
{
List List=userRepository.getAll;
HashMap userList=新建HashMap();
userList.put(“list”,list);
userList.put(“total”,list.size());
返回用户列表;
}
您还应该将该控制器的参数从
@RequestBody
更改为
@PathVariable

@PathVariable
注释用于将URI变量绑定到方法 参数

@RequestBody
注释绑定发送进来的内容(POST/PUT) 带注释变量的请求正文。(通常,您只能使用 @可包含“正文”内容的请求的RequestBody,例如POST 或者说


您可以阅读有关HTTP方法的内容。

这里的要点不是HashMap迭代,而是即使在这里您也会得到空的响应数据

 this.userService.getUsers("canada").subscribe((data) => {
       console.log(data);         // this returns an empty object
添加@ResponseBody

 @PostMapping(value = "getAllUsers")
 @ResponseBody
 public HashMap<String, Object> getAllUsers(@RequestBody String s)

=>最好使用Http约定,即使用get通过post获取数据。虽然数据仍将在Post中接收,但更喜欢get()。

这里的重点不是HashMap迭代,而是即使在这里也会得到空的响应数据

 this.userService.getUsers("canada").subscribe((data) => {
       console.log(data);         // this returns an empty object
添加@ResponseBody

 @PostMapping(value = "getAllUsers")
 @ResponseBody
 public HashMap<String, Object> getAllUsers(@RequestBody String s)

=>最好使用Http约定,即使用get通过post获取数据。虽然数据仍将在Post中接收,但更喜欢get()。

尝试
http.get()
而不是
http.Post()
首先阅读http协议的工作原理,然后使用它们。您的URL是否完整?你展示的是“api/v1/getAllUsers”。您是否在网络选项卡中检查了呼叫响应?是否确定,
List List=userRepository.getAll有值的数据
加拿大
?另外,
data
上的
forEach
在前端不起作用,因为它不是
Array
类型,您需要在
data.list
上迭代它。是的,有关于加拿大值的数据,我可以得到总数,但不能得到数据本身尝试
http.get()
而不是
http.post()
首先阅读http协议的工作原理,然后使用它们。您的URL是否完整?你展示的是“api/v1/getAllUsers”。您是否在网络选项卡中检查了呼叫响应?是否确定,
List List=userRepository.getAll有值的数据
加拿大
?另外,
data
上的
forEach
在前端不起作用,因为它不是
Array
类型,您需要在
数据上迭代它。list
。是的,有关于加拿大值的数据,我可以得到总数,但不能得到数据本身。我认为这不是问题。您仍然可以声明
any
,并从REST端点获取数据。这里的问题是没有从REST控制器返回任何内容。但是您不能对
任何
应用
forEach
方法,也没有不能从POST请求中检索数据的规则,将这些方法用于特定目的只是标准,但它们没有这样的限制。我认为这不是问题。您仍然可以声明
any
,并从REST端点获取数据。这里的问题是没有从REST控制器返回任何内容。但是您不能在
any
上应用
forEach
方法,也没有无法从POST请求检索数据的规则,使用这些方法用于特定目的是标准的,但它们没有这样的限制是的,正如你所说的问题在控制器端,我得到了空数据,但我得到了总数,谢谢。正如你所说的问题在控制器端,我得到了空数据,但我得到了总数,谢谢