2 mrluo93 MrLuo93 于 2017.09.05 16:45 提问

java实现接口回调数据

求教各位大神, 如何写接口给别人调用 。 最后保存别人返回的数据

9个回答

baidu_26611019
baidu_26611019   2017.09.06 11:39
已采纳

从你提的问题来看,你应该对跨进程通信没有太好的理解。接口设计的目的就是让别人用自己的代码实现的功能或者相反使用别人代码实现的功能,一般
两方的代码都不在同一个进程中,而进程间是严禁直接通信的(出于数据安全考虑)。自然要想通信必须要遵守一定的规则,如此一来便出现了
诸多的跨进程通信的技术,比如:socket、RMI、RPC、管道、共享内存等。
基于上诉原因,你要想自己写接口并提供给别人用,需要搞清楚下面几点:
1、通信用什么技术
2、消息通过什么方式封装传输(直接传参数、JSON、protocol buffer 还是.....)
3、按照实际需求定义好接口方法,尽量通过方法名称就能知道其用途,方法的返回是否需要考虑不同语言的差异
4、实现你定义的方法,并写测试代码验证代码无误
5、将接口发布出去

caozhy
caozhy   Ds   Rxr 2017.09.05 16:49

语言层面的话,定义一个接口,你的函数接受一个这个接口的变量,然后再在你的函数里调用它的方法,实现回调。

系统层面,你编写一个web服务,将这个地址告诉别人,别人需要通知你的时候,就往上面发请求。

MrLuo93
MrLuo93 我现在就是不知道这个接口具体怎么去实现的...
3 个月之前 回复
qq_34841631
qq_34841631   2017.09.05 21:32

比如这样:
这里以SpringBoot的为例,语法是kotlin的,与java类似,应该能看懂

@RequestMapping("/test")                 //这是接口访问路径参数
@RestController                       //表示这是控制层
class RoleController {            //类名
    //获取信息
@GetMapping("/getInfo")      // 定义一个获取信息的接口,地址为/getInfo
fun getInfoDetails(@RequestParam id: Long): Map<String, Any?> {    //定义接口参数名称为id,参数类型是Long,接口响应参数类型为一个Map,这个Map中的key是字符串类型,value是任意类型
    val map = mutableMapOf<String, Any?>()  //定义一个可变的Map,跟java中new出一个HashMap类似
    try {
        val list = listOf("信息1","信息2",“信息3") //定义一个只读类型的集合,集合里面放3个元素,这里可以改用自己的Service层方法去实现获取数据
        map.put("success", true) //把状态值返回给调用方
        map.put("data", list) //把集合放到map中,返回给调用接口的那一方
    } catch(e: Exception) {
        map.put("success", false)
        map.put("message", "获取失败")
    }
    return map
}
}

接口定义就结束了,现在把接口地址发给要调用的一方,这样写:

url: /analysis/role/getInfo?id={id}
method: get
请求参数说明:id类型为Long

响应参数说明:success类型为Boolean,true表示获取成功,false表示获取失败;data类型为List,message是获取失败的提示信息

如果把程序部在本机运行,那么浏览器或是测试工具的调用接口方式是这样的:
http://localhost:8080/test/getInfo?id=4

caozhy
caozhy   Ds   Rxr 2017.09.05 16:53
 interface A
{
void foo();
}
你的代码
void bar(A callback)
{
...
callback.foo();
...
}
MrLuo93
MrLuo93 你能写个示例给我看看么? 谢谢
3 个月之前 回复
caozhy
caozhy   Ds   Rxr 2017.09.05 17:06
 class B inplements A
{
void foo() { 回调代码 }
}
bar(new B());
majingcbc
majingcbc   2017.09.05 17:42

可以采用RPC。给出接口jar包给调用

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.05 18:06

“如何写接口给别人调用”

接口实际上是不能直接是哟个的,调用的时候虽然类型是接口类型,实际上调用的是接口的实现类

知道了接口,,在去了解下回调,基本上就可以完成需求http://blog.csdn.net/small_mouse0/article/details/59114843

zy841958835
zy841958835   Ds   Rxr 2017.09.05 16:55

你这个接口是需要你自己实现还是别人实现

MrLuo93
MrLuo93 回复pluie-cloud: 好 , 我去看看
3 个月之前 回复
MrLuo93
MrLuo93 使用java ee去写的一个普通的java项目
3 个月之前 回复
zy841958835
zy841958835 http://www.cnblogs.com/walle2014/p/3815490.htmlcopy代码下载对应的jar包
3 个月之前 回复
MrLuo93
MrLuo93 回复pluie-cloud: 用java e
3 个月之前 回复
zy841958835
zy841958835 我懂你的意思 你说的接口 不是java数据类型的一种 你可以建立一个http服务端
3 个月之前 回复
MrLuo93
MrLuo93 我写接口接收别人接口返回的数据然后保存 (就是一个接收别人数据然后保存的接口)
3 个月之前 回复
oXiaoKang12
oXiaoKang12   2017.09.05 17:00

你是java ee 的项目?

MrLuo93
MrLuo93 回复oXiaoKang12: 好的,谢谢
3 个月之前 回复
oXiaoKang12
oXiaoKang12 回复MrLuo93: 看不懂 就看看这个写的很详细http://www.zuidaima.com/share/1590350954564608.htm
3 个月之前 回复
oXiaoKang12
oXiaoKang12 public class WorkFlowInterfaceImpl implements WorkFlowInterface { @Resource private LiuChengjiekouService liuChengjiekouService; @Resource(name="jdbcTemplateOMS") private JdbcTemplate jdbcTemplateOMS; @Override public String createEfile(String guid,String bustype,String huanjie) {
3 个月之前 回复
oXiaoKang12
oXiaoKang12 回复MrLuo93: @WebService(endpointInterface="com.hotent.platform.webservice.api.HelloWorld", targetNamespace="http://impl.webservice.platform.hotent.com/") public interface HelloWorld { String sayHi(@WebParam(name="text")String text,@WebParam(name="xml")String xml); }
3 个月之前 回复
MrLuo93
MrLuo93 回复oXiaoKang12: 好的, 那麻烦你了
3 个月之前 回复
oXiaoKang12
oXiaoKang12 回复MrLuo93: 代码有 但是调用文档找不到了
3 个月之前 回复
oXiaoKang12
oXiaoKang12 回复MrLuo93: 我给你找找,记得以前写过一个
3 个月之前 回复
MrLuo93
MrLuo93 是的
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片