利用restTemplate远程调controller路径取数据
Spring的RestTemplate提供了很多对HTTP method的支持,这里主要说常用的get和post。
使用环境为springboot。
首先要写相关配置类,举例:
@Configuration
public class Config {
@Autowired
RestTemplateBuilder builder;
@Bean
public RestTemplate restTemplate() {
return builder.build();
}
}
然后调目标cotroller层,比如目标cotroller层为
@RestController
@RequestMapping("/aaa")
public class TemplateController {
@PostMapping(value = "/ppp")
public List<Students> getInfo(@RequestBody String sid) {
...
return stuService.getId(areaId);
}
}
需要用post的方法去调
@Autowired
private RestTemplate restTemplate;
public List<Student> getMsg() {
String id = "111";
HttpEntity<String> entity = buildEntity(id);
String url = "http://ip:port/aaa/ppp";
return restTemplate.postForObject(url, entity, List.class);
}
private HttpEntity<String> buildEntity(String id) {
JSONObject jo = new JSONObject();
jo.put("sid", id);
String requestJson = jo.toJSONString();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
return new HttpEntity<String>(requestJson, headers);
}
再比如目标controller层为
@RestController
@RequestMapping(value = "/aaa")
public class StudentController {
@GetMapping(value = "/ggg")
public Set<Students> queryStudent(@RequestParam(value = "code") String code,
@RequestParam(value = "objectKey") String objectKey,
@RequestParam(value = "studentId") Integer studentId) {
return sService.get(code, objectKey, kindId);
}
}
需要用get的方法去调
@Autowired
private RestTemplate restTemplate;
public Set queryStudent(String ip, int port,EventRelationTask eventRelationTask) {
Integer studentId = eventRelationTask.getStudentId();
String code = eventRelationTask.getCode();
String objectKey = eventRelationTask.getObjectKey();
String url =
"http://" + ip + ":" + port + Student.PROJECTNAME + "event/queryparentnode?code=" + code + "&objectKey=" + objectKey + "&studentId=" + studentId;
Set<Student> students = new HashSet<>();
students = restTemplate.getForObject(url, Set.class); //主要这个方法
if (students != null) {
return students;
}
return new HashSet();
}