- 最简单方式:使用Map接收
案例:向接口路径 /returnJson2发请求,返回的json字符串用Map接收
@RequestMapping("/returnJson3")
public List<User> test3(@RequestBody Map<String,String> map) {
User user = new User();
user.setName("ee");
user.setAge(11);
Map<String,Object> response = new RestTemplate().postForObject("http://localhost:9000/returnJson2", user, Map.class);
return (List<User>) response.get("users");
}
@RequestMapping("/returnJson2")
public String test2(@RequestBody Map map) {
//{"address":"wuhan","teamName":"无敌舰队","users":[{"age":10,"name":"u1"},{"age":12,"name":"u2"}]}
System.out.println(map);
return "{\"address\":\"wuhan\",\"teamName\":\"无敌舰队\",\"users\":[{\"age\":10,\"name\":\"u1\"},{\"age\":12,\"name\":\"u2\"}]}";
}
- 用String接收,借助JSONObject转换(JSONObject的get()可取数据)也可成功
@RequestMapping("/returnJson1")
public List<User> test1(@RequestBody Map<String,String> map) {
String response = new RestTemplate().postForObject("http://localhost:9000/returnJson2", map, String.class);
JSONObject jsonObject = JSON.parseObject(response);
return (List<User>) jsonObject.get("users");
}
- NG的接收方式(用类,属性含另一个类对象)
@Data
@ToString
public class Response {
private String TeamName;
private String address;
//以下两种方式都是NG的
private User data;
}
//NG
@RequestMapping("/returnJson4")
public User test4(@RequestBody Map<String,String> map) {
Response response = new RestTemplate().postForObject("http://localhost:9000/returnJson2", map, Response.class);
System.out.println(response);
return response.getData();
}
Console 运行结果:
Response(TeamName=无敌舰队, address=wuhan, data=null)
- NG的接收方式(用类,属性含另一个类对象集合)
@Data
@ToString
public class Response {
private String TeamName;
private String address;
//以下两种方式都是NG的
private List<Map<String,Object>> data;
// private Map<String,Object>[] data;
}
//NG
/* @RequestMapping("/returnJson4")
public List<Map<String,Object>> test4(@RequestBody Map<String,String> map) {
Response response = new RestTemplate().postForObject("http://localhost:9000/returnJson2", map, Response.class);
return response.getData();
}*/
//NG
/* @RequestMapping("/returnJson4")
public Map<String,Object>[] test4(@RequestBody Map<String,String> map) {
Response response = new RestTemplate().postForObject("http://localhost:9000/returnJson2", map, Response.class);
return response.getData();
}*/