【发布时间】:2016-11-22 12:16:47
【问题描述】:
【问题讨论】:
标签: java spring-boot resttemplate microservices
【问题讨论】:
标签: java spring-boot resttemplate microservices
在这两个微服务上创建一个类或将该类创建一个 jar 并添加到两个微服务中,以便它们都可以访问相同的数据。
假设类是
class TestData{
private String name;
private String id;
// getters and setters
}
现在您可以将数据从 M1 发送到 M2,如下所示
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
TestData data = new TestData();
HttpEntity<?> entity = new HttpEntity<Object>(data,headers);
ResponseEntity<Object> responseEntity = restTemplate.exchange("url", HttpMethod.POST, entity, Object.class);
在微服务 M2 中,您可以编写一个控制器来获取数据并按如下方式处理它
@RequestMapping(value="/url",method=RequestMethod.POST)
public Object do(@RequestBody TestData data){
// do something
return //something
}
【讨论】:
这里是示例代码
public class Test {
public static void main(String[] args) {
String jsonString = "{\"id\" : \"123\",\"name\" : \"Tom\",\"class\" : {\"subject\" : \"Math\",\"teacher\" : \"Jack\"}}";
RestTemplate restTemplate = new RestTemplate();
String url = "http://192.1168.1.190:8080/test" // url for second service
System.out.println(responserEntityValue(jsonString,restTemplate,url,HttpMethod.POST,String.class));
}
public ResponseEntity<String> responserEntityValue(final String body, final RestTemplate restTemplate,
final String uRL, final HttpMethod requestMethod, final Class<String> stringClass) {
HttpHeaders headers = new HttpHeaders();
// Set all headers
headers.add(DatabaseConstants.CONTENT_TYPE, "application/json");
HttpEntity<String> request = new HttpEntity<>(body, headers);
return restTemplate.exchange(uRL, requestMethod, request, stringClass);
}
【讨论】:
假设您有 MicroService1,它需要将 JSONObject => JsonObject 发送到另一个位于不同机器但在同一网络上的 MicroService2。
发送方:
RestTemplate restTemplate = new RestTemplate();
String jsonString = restTemplate.postForObject("http://10.177.7.128:8080/user/insertJsonObject",jsonObject,String.class);
restTemplate.postForObject 的语法是:
ResponseType var1 = restTemplate.postForObject("network ip Address:portnumber/path",JSONObject,ResponseType)
要了解 URI,请转到系统偏好设置 > 网络
在接收端接收对象
@RequestMapping(value="/user/insertJsonObject", method=RequestMethod.POST)
public String updateProductSold(@RequestBody JSONObject jsonObject) {
...Body
...
...
return responseStatus;
【讨论】: