远程接口调用

在服务端使用java语言,向远程接口发起请求,得到响应数据的方法。实现远程接口调用方法很多,这里我们使用spring封装的工具类RestTemplate,使用起来最方便简单。

1 发起get请求

@Test
public void getForObject(){
    //依赖jackson组件,把响应体的json数据转为指定对象:String对象
    RestTemplate t = new RestTemplate();
    //https://www.tianapi.com/
    String url="https://apis.tianapi.com/toutiaohot/index?key=ed475d5faa4488028e9f5e369c77e1b5";
    String forObject = t.getForObject(url, String.class);
  }

@Test
public void getForObjectUriValiables(){
  //依赖jackson组件,把响应体的json数据转为指定对象:AxiosResult对象
  String url="http://localhost:8080/user/{0}";
  RestTemplate t = new RestTemplate();
  AxiosResult forObject = t.getForObject(url, AxiosResult.class,"2");
  System.out.println(forObject);
}

@Test
public void getForEntity(){
  //getForEntity可以获取响应头,响应体
  String url="http://localhost:8080/user/{0}";
  RestTemplate t = new RestTemplate();
  ResponseEntity<String> resp = t.getForEntity(url, String.class);
  String body = resp.getBody();//响应体
  HttpHeaders headers = resp.getHeaders();//响应头
}

2 发起post请求

@GetMapping("/test1")
public ResponseEntity test1(){
    String url = "http://192.168.21.178:8888/book/add";
    MultiValueMap<String, Object> test= new LinkedMultiValueMap<String, Object>();
    test.add("bookId",1111);
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(test, headers);
    ResponseEntity<String> s = restTemplate.postForEntity(url, request, String.class);
    System.out.println(s.getBody());
    return ResponseEntity.ok(AxiosResult.suc());
}

@GetMapping("/test1")
public ResponseEntity test1(){
    String url = "http://192.168.21.178:8888/book/add";
    MultiValueMap<String, Object> test= new LinkedMultiValueMap<String, Object>();
    test.add("bookId",1111);//?bookId=1111
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(test, headers);
    String s = restTemplate.postForObject(url,request,String.class);
    System.out.println(s);
    return ResponseEntity.ok(AxiosResult.suc());
}

3 发起put请求

@Test
public void put(){
    //put方法,无返回值
    String url="http://localhost:8080/role";
    Map<String,String> map = new HashMap<>();
    map.put("id","1");
    map.put("rname","测试修改角色名");
    RestTemplate t = new RestTemplate();
    t.put(url, map);
}

4 发起delete请求

@Test
public void del(){
  //无返回值
  String url="http://localhost:8080/role/{0}";
  RestTemplate t = new RestTemplate();
  t.delete(url,"3,4");
}

5 通用方法

//可以设置请求头,请求体,请求方法;可以获取响应头,响应体
@Test
public void exchange(){
	String url="http://localhost:8080/role";
	Role r = new Role();
	r.setRname("aaaa");
	r.setRdesc("bbbb");
	RestTemplate t = new RestTemplate();
	HttpHeaders headers = new HttpHeaders();
	headers.add("admin_token","asdfasdfasdf");
	HttpEntity req = new HttpEntity(r,headers);

	ResponseEntity<String> resp = t.exchange(url, HttpMethod.POST, req, String.class);
	String body = resp.getBody();
	HttpHeaders headers1 = resp.getHeaders();
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个 Java 代码示例,实现了一个包含本地增删改查并且调用远程服务的接口,并且在调用远程服务时捕获异常,以保证本地业务不受影响: ```java public interface MyService { // 本地增删改查 void add(Object obj); void delete(Object obj); void update(Object obj); Object get(int id); // 远程服务调用 void callRemoteService(Object obj) throws RemoteException; } public class MyServiceImpl implements MyService { // 本地增删改查实现 public void add(Object obj) { // 实现代码 } public void delete(Object obj) { // 实现代码 } public void update(Object obj) { // 实现代码 } public Object get(int id) { // 实现代码 return null; } // 远程服务调用实现 public void callRemoteService(Object obj) throws RemoteException { try { // 调用远程服务 RemoteService service = getRemoteService(); service.doSomething(obj); } catch (RemoteException ex) { // 处理远程服务异常 log.error("Failed to call remote service: " + ex.getMessage()); throw ex; } catch (Exception ex) { // 处理其他异常 log.error("Failed to call remote service: " + ex.getMessage()); throw new RemoteException(ex.getMessage()); } } // 获取远程服务 private RemoteService getRemoteService() throws RemoteException { // 实现代码 return null; } } ``` 在上面的代码中,我们定义了一个 MyService 接口,包含了本地增删改查和调用远程服务两个功能。然后,我们实现了一个 MyServiceImpl 类,实现了 MyService 接口中的所有方法。在 callRemoteService 方法中,我们使用 try-catch 块来捕获 RemoteException 异常,并在 catch 块中处理异常情况。同时,为了处理其他异常情况,我们在 catch 块中使用 Exception 异常来捕获其他未知异常,并将其转换为 RemoteException 异常抛出。这样,即使远程服务调用出现异常,本地业务也不会受到影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值