本例子是用于两个应用程序之间的数据对接。通过程序内的连接我们可以看到,通过访问链接,我们可以随机得到一些JSON数据:
{"type":"success","value":{"id":3,"quote":"Spring has come quite a ways in addressing developer enjoyment and ease of use since the last time I built an application using it."}}
{"type":"success","value":{"id":4,"quote":"Previous to Spring Boot, I remember XML hell, confusing set up, and many hours of frustration."}}
- 等
我们可以通过本例将这些数据映射到固定的对象中去。
记录
本例一共包含三个类:Quote、Value和Application。前两个用于对应JSON的数据结构进行一一对应,后一个是用于运行程序,关联映射。前两个的数据结构为:
Quote{
String type;
Value value{
Long id;
String quote;
};
}
JSON的数据结构为:
{
"type":"",
"value":{
"id":"",
"quote":
}
}
可见类中的数据类型是不重要的,但是变量名一定要与JSON的数据一一对应
Quote与Value
两个类的功能相同,就一并说了。都是用于映射数据,除了对其中属性都要设置Get和Set方法之外,类都需要使用@JsonIgnoreProperties(ignoreUnknown = true)
进行注释即可。
Application
Application除了主要部分多加了两个Bean注释的方法:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
return builder.build();
}
/**
* 实现加载数据
*/
@Bean
public CommandLineRunner run(RestTemplate restTemplate) throws Exception{
return args ->{
Quote quote = restTemplate.getForObject(
"http://gturnquist-quoters.cfapps.io/api/random",Quote.class);
log.info(quote.toString());
};
}
两个方法中,前一个返回值域后一个的参数值存在映射关系,但是并不严格。在通常情况下,可以通过类型来确定两者之间的关系,也就是前者的方法名可以与后者的参数名不相同。但是当存在多个相同的返回类型的Bean时,则需要确认唯一的关系,否则不能确定使用哪个。
这是使用RestTemplate.getForObject方法来关联结果与对象的。这里通过两个Bean将两个部分拆开来。