写一个代替postman的端口测试之前accessing-data-mysql-0.0.1-SNAPSHOT.jar
之前的文件:
https://www.jianshu.com/p/4820e5f7729c
官网地址:
https://spring.io/guides/gs/consuming-rest/
初始代码分析:
用RestTemplate获取指定url返回的数据,并以绑定的数据类型转化。
packagecom.example.consumingrest;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.boot.CommandLineRunner;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.boot.web.client.RestTemplateBuilder;
importorg.springframework.context.annotation.Bean;
importorg.springframework.web.client.RestTemplate;
@SpringBootApplication
publicclassConsumingRestApplication{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(ConsumingRestApplication.class);
publicstaticvoidmain(String[]args) {
SpringApplication.run(ConsumingRestApplication.class,args);
}
@Bean
publicRestTemplaterestTemplate(RestTemplateBuilderbuilder) {
returnbuilder.build();
}
@Bean
publicCommandLineRunnerrun(RestTemplaterestTemplate)throwsException{
returnargs->{
Quotequote=restTemplate.getForObject(
"https://quoters.apps.pcfone.io/api/random",Quote.class);
log.info(quote.toString());
};
}
脚注:
[@SpringBootApplication] 开启自动配置
[LoggerFactory.getLogger(ConsumingRestApplication.class);] 在控制台打印ConsumingRestApplication.class类的日志。
[builder.build()] 使用 RestTemplateBuilder.build() 代替 new RestTemplate()
写一个存数据的类(官网上分了两层)
第一层:
packagecom.example.consumingrest;
importcom.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true)
publicclassQuote{
privateStringtype;
privateValuevalue;
publicQuote() {
}
publicStringgetType() {
returntype;
}
publicvoidsetType(Stringtype) {
this.type=type;
}
publicValuegetValue() {
returnvalue;
}
publicvoidsetValue(Valuevalue) {
this.value=value;
}
@Override
publicStringtoString() {
return"Quote{"+
"type='"+type+'\''+
", value="+value+
'}';
}
}
脚注:
[@JsonIgnoreProperties(ignoreUnknown = true)] class中忽视所有没写的属性(properties)
第二层:
packagecom.example.consumingrest;
importcom.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true)
publicclassValue{
privateLongid;
privateStringquote;
publicValue() {
}
publicLonggetId() {
returnthis.id;
}
publicStringgetQuote() {
returnthis.quote;
}
publicvoidsetId(Longid) {
this.id=id;
}
publicvoidsetQuote(Stringquote) {
this.quote=quote;
}
@Override
publicStringtoString() {
return"Value{"+
"id="+id+
", quote='"+quote+'\''+
'}';
}
}
要改的部分:
url
url改成我要调用的,而不是官网给的default版本。
返回的数据格式
由于这里的schema,输出的数据格式时json。json文件中的键值对改成我要调用的url的输出的格式。
我的核心代码:
目标:实现 accessing-data-mysql-0.0.1-SNAPSHOT.jar中增删改查的postman所做的事。
以get方法显示所有用户信息的功能。
由于显示所有用户信息,所以现实的是一个List,也就是一个数组。
@Bean
publicCommandLineRunnerrun(RestTemplaterestTemplate)throwsException{
returnargs->{
Quote[]quotes=restTemplate.getForObject(
"http://192.168.4.31:18001/user/all",Quote[].class);
assertquotes!=null;
log.info(Arrays.toString(quotes));
};
}
写一个存数据的类(官网上给了两层来存数据,我这边只用一层)
由于显示所有用户信息,所以现实的是一个List,也就是一个数组。
packagecom.example.consumingrest;
importcom.fasterxml.jackson.annotation.JsonIgnoreProperties;
importjava.util.ArrayList;
importjava.util.List;
@JsonIgnoreProperties(ignoreUnknown=true)
publicclassQuote{
privateIntegerid;
privateStringname;
privateStringemail;
publicQuote() {
}
publicIntegergetId() {
returnid;
}
publicvoidsetId(Integerid) {
this.id=id;
}
publicStringgetName() {
returnname;
}
publicvoidsetName(Stringname) {
this.name=name;
}
publicStringgetEmail() {
returnemail;
}
publicvoidsetEmail(Stringemail) {
this.email=email;
}
@Override
publicStringtoString() {
return"Quote{"+
"id="+id+
"name="+name+
"email="+email+'\''+
'}';
}
}
脚注:
[@JsonIgnoreProperties(ignoreUnknown = true)] class中忽视所有没写的属性(properties)
以post方法添加用户信息
// private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);
@Bean
publicStringrun(RestTemplaterestTemplate)throwsException{
Stringurl="http://192.168.4.31:18001/user/add";
//headers
HttpHeadersrequestHeaders=newHttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
//body
//MultiValueMap<String, String> requestBody = new LinkedMultiValueMap<>();
Map<String,String>requestBody=newHashMap();
requestBody.put("id","2");
requestBody.put("name","2");
requestBody.put("email","2");
//HttpEntity
HttpEntity<Map<String,String>>requestEntity=newHttpEntity<>(requestBody,requestHeaders);
//HttpEntity<MultiValueMap> requestEntity = new HttpEntity<MultiValueMap>(requestBody, requestHeaders);
Strings=restTemplate.postForObject(url,requestEntity,String.class);
returns;
};
脚注:
[requestHeaders.setContentType(MediaType.APPLICATION_JSON);] 设置请求的数据类型
[Map<String, String> requestBody = new HashMap();] 以hashmap来存输入的Body
[requestBody.put("id", "2");] 加入键值对
今日小tip:
一个端口上只能最多存在一个进程,所以要在服务器上用 consuming-rest-0.0.1-SNAPSHOT.jar来测试 accessing-data-mysql-0.0.1-SNAPSHOT.jar时,要用不同的端口。
网友评论