springboot RestTemplate 我个人认为也算是我们说java接口吧,之前没接触过java这类的接口.现在有时间好好的研究下.
demo端主要是发送数据的,case端是接收数据端的并返回接收数据一端.
demo层的配置:
增加一个Users.java 实体类
@Data //get set 方法
@AllArgsConstructor //全参数构造器
@NoArgsConstructor //无参数构造器
public class Users {
private Integer id;
private String username;
}
在springboot中 将http这些封装成了 RestTemplate 模板:
RestConfig.java
@Configuration
public class RestConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
case层配置:
RestConfig.java
@Configuration
public class RestConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
由于本地运行 端口存在冲突,所以修改 application.properties参数 避免冲突
server.port=8081
server.servlet.context-path=/case
这些完成后,
demo端 get方法整理 (我在这里不一一分析了,这样整体粘贴过来,信息更全面)
@RestController
public class UserControllerGet {
@Autowired
private RestTemplate restTemplate;
// 访问地址 http://localhost:8080/getForObject
@GetMapping("/getForObject")
public Object getForObject() {
//设置好URL
String url = "http://localhost:8081/case/baseParam?id={1}&username={2}";
Users users = restTemplate.getForObject(url, Users.class, 100, "徐大虾");
return users;
}
@GetMapping("/getForEntity")
public Map<String, Object> getForEntity() {
String url = "http://localhost:8081/case/baseParam1?id={id}&username={username}";
HashMap<String, Object> map = new HashMap<>();
map.put("id", 222);
map.put("username", "dashazi");
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, map); //必须使用ResponseEntity包装
HttpStatus statusCode = entity.getStatusCode();
System.out.println(statusCode); //状态码
System.out.println(entity.getStatusCodeValue()); //状态码值
System.out.println(entity.getBody()); //内容
System.out.println(entity.getHeaders());//请求头
return entity.getBody();
}
@GetMapping("/getForEntity1")
public Map<String, Object> getForEntity1() {
String url = "http://localhost:8081/case/baseParam2?id={id}&username={username}";
HashMap<String, Object> map = new HashMap<>();
map.put("id", 222);
map.put("username", "dashazi");
ResponseEntity<HashMap> entity = restTemplate.getForEntity(url, HashMap.class, map); //必须使用ResponseEntity包装
HttpStatus statusCode = entity.getStatusCode();
System.out.println(statusCode); //状态码
System.out.println(entity.getStatusCodeValue()); //状态码值
System.out.println(entity.getBody()); //内容
System.out.println(entity.getHeaders());//请求头
return entity.getBody();
}
}
与之对应的case端代码:
@RestController
public class ServerController {
//基本类型
@RequestMapping("/baseParam")
public Users baseParam (Integer id , String username) {
Users users = new Users();
users.setId(id);
users.setUsername(username);
System.out.println("baseParam 服务器 被访问 ");
return users;
}
//实体类访问参数
@RequestMapping("/baseParam1")
public Users baseParam1 (Users users) {
System.out.println("baseParam1 服务器 被访问 ");
return users;
}
@RequestMapping("/baseParam2")
public JSONObject baseParam2 (Users users) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("status", "ok");
jsonObject.put("code", 200);
System.out.println("baseParam1 服务器 被访问 ");
System.out.println(users);
return jsonObject;
}
demo端 post 方法
@RestController
public class UserControllerPost {
@Autowired
private RestTemplate restTemplate;
/**
* 基本类型和实体类型传参
*/
@GetMapping("/postForObject1")
public Users postForObject1() {
//远程访问URL
String URL = "http://localhost:8081/case/defineParam";
Users users = new Users();
users.setId(1000);
users.setUsername("xu da xia 2 hao ");
ResponseEntity<Users> postForEntity = restTemplate.postForEntity(URL, users, Users.class);
return postForEntity.getBody();
}
@GetMapping("/postForObject2")
public Users postForObject2() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//远程访问URL
String URL = "http://localhost:8081/case/defineParam";
Users users = new Users();
users.setId(1000);
users.setUsername("xu da xia 2 hao ");
HttpEntity<Users> entity = new HttpEntity<>(users, headers);
ResponseEntity<Users> postForEntity = restTemplate.postForEntity(URL, entity, Users.class);
return postForEntity.getBody();
}
}
case端代码
@RestController
public class ServerController {
@RequestMapping("/defineParam")
public Users defineParam (@RequestBody Users users){
System.out.println(users); //接收参数并打印.
Users users1 = new Users();
users1.setId(10000);
users1.setUsername("tian xia di er"); //返回自己定义的参数
return users1;
}
}
demo 端exchange方法:
@RestController
public class UserControllerExchange {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/UserExchange")
public Users UserExchange(){
String url = "http://localhost:8081/case/ListParam";
MultiValueMap<String, Object > map = new LinkedMultiValueMap<>();
map.add("id",100);
map.add("username","xiaoxiao");
HttpEntity<MultiValueMap> entity = new HttpEntity<>(map);
ResponseEntity<Users> exchange = restTemplate.exchange(url, HttpMethod.POST, entity, Users.class);
return exchange.getBody();
}
}
case端代码:
@RestController
public class ServerController {
//返回自己定义的参数
@RequestMapping("/ListParam")
public JSONObject ListParam ( Users users){
System.out.println(users);
JSONObject jsonObject = new JSONObject();
jsonObject.put("status", "ok");
jsonObject.put("code", 200);
return jsonObject;
}
}
就到这里了,大家按照方法名一一对照就可以找到关系了.