1 RestTemplate的使用
2 RestTemplate对docker remote api 的请求使用
docker服务提供了一套docker remote api 是restful风格,以供使用。
“http://192.168.10.11:2375/v1.41/containers/{id}/json”:查看此ID容器的详细信息
使用Postman测试:
使用RestTemplate发送请求:
@Test
void testRestart(){
RestTemplate restTemplate = new RestTemplate();
String forObject = restTemplate.getForObject("http://192.168.10.11:2375/v1.41/containers/76a194/json", String.class);
System.out.println(forObject);
}
可以得到正常结果!
使用RestTemplate发送请求,并反序列化成对象:
- 发送请求代码
@Test
void testRestart22(){
RestTemplate restTemplate = new RestTemplate();
ContainerInfo forObject = restTemplate.getForObject("http://192.168.10.11:2375/v1.41/containers/76a194/json", ContainerInfo.class);
System.out.println(forObject.toString());
}
- 反序列化的对象类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ContainerInfo {
private String id;
private String Name;
}
可以留意到并没有成功反序列化上对象!!!!!!
后面测试,直接返回反序列化为JSONObject也成功,但是这样反序列化成对象报错!!!!
搞不清楚到底怎么回事!!!
2.3使用RestTemplate发送请求,并反序列化成对象(使用@JsonProperty注解):
@JsonProperty就是相当于给类的属性取一个别名。参考
- 发送请求代码:同上
- 类对象:
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(
ignoreUnknown = true
)
public class ContainerInfo {
@JsonProperty("Id")
private String id;
@JsonProperty("Name")
private String Name;
}
好!非常奇怪现在就可以反序列化上了!!!!但是我不知道为什么,取个别名就可以了。
此处别名,必须和请求返回的字段一模一样,才能把属性注入到对象中
2.4发送请求,用String接收,再用JSONObject转换成对象
- 发送请求代码:
@Test
void testRestart123(){
RestTemplate restTemplate = new RestTemplate();
String forObject = restTemplate.getForObject("http://192.168.10.11:2375/v1.41/containers/76a194/json", String.class);
InspectContainerInfo inspectContainerInfo = JSONObject.parseObject(forObject, InspectContainerInfo.class);
System.out.println(inspectContainerInfo);
}
- 对象类:
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(
ignoreUnknown = true
)
public class InspectContainerInfo {
private static final long serialVersionUID = 1L;
private String Id;
private String Name;
private String Image;
private String created;
}
同样的,此处没有用注解了,但是必须属性的字段名和返回的一模一样。