lealone-framework icon indicating copy to clipboard operation
lealone-framework copied to clipboard

lealone-service写服务,要返回文件,请问下services.sql和service类如何写?

Open duzeng opened this issue 1 year ago • 6 comments

方法返回文件,如图片

duzeng avatar Aug 15 '23 14:08 duzeng

没有返回文件的数据类型,但是可以在 services.sql 中把服务的返回类型声明成:BINARY、BLOB、CLOB, 此时生成的 service 类对应的方法的返回类型是: byte[]、java.sql.Blob、java.sql.Clob。

codefollower avatar Aug 15 '23 15:08 codefollower

还有个问题,返回引用类型如byte[]的话,HTTP请求服务后的响应头中的Content-Type是text/plain或者text/html,所以得到的是这个对象的地址字符串(toString())。请问如何返回正确类型?

duzeng avatar Aug 15 '23 15:08 duzeng

还有个问题,返回引用类型如byte[]的话,HTTP请求服务后的响应头中的Content-Type是text/plain或者text/html,所以得到的是这个对象的地址字符串(toString())。请问如何返回正确类型?

如果是通过 http 返回给前端,现在确实是不支持给前端直接返回二进制数据的。 默认 content-type 是 application/json。

目前只有使用 lealone client 调用后端服务(用的是专有协议)才支持返回二进制数据。 后续再看看怎么用 http 协议返回二进制数据。

codefollower avatar Aug 15 '23 16:08 codefollower

lealone-service 默认集成了 vert.x,也可以跟 spring boot 集成,lealone-service 现在确实不支持给前端下载文件, 我们自己的应用现在是直接用 vert.x 或 spring boot 来下载文件。

lealone-service 要支持返回二进制数据的话,最终也只是包装一下 vert.x 或 spring boot。

codefollower avatar Aug 15 '23 16:08 codefollower

还有个问题,返回引用类型如byte[]的话,HTTP请求服务后的响应头中的Content-Type是text/plain或者text/html,所以得到的是这个对象的地址字符串(toString())。请问如何返回正确类型?

如果是通过 http 返回给前端,现在确实是不支持给前端直接返回二进制数据的。 默认 content-type 是 application/json。

目前只有使用 lealone client 调用后端服务(用的是专有协议)才支持返回二进制数据。 后续再看看怎么用 http 协议返回二进制数据。

lealone-client的api文档有没有?是JDBC执行SQL方式吗?

duzeng avatar Aug 16 '23 00:08 duzeng

还有个问题,返回引用类型如byte[]的话,HTTP请求服务后的响应头中的Content-Type是text/plain或者text/html,所以得到的是这个对象的地址字符串(toString())。请问如何返回正确类型?

如果是通过 http 返回给前端,现在确实是不支持给前端直接返回二进制数据的。 默认 content-type 是 application/json。 目前只有使用 lealone client 调用后端服务(用的是专有协议)才支持返回二进制数据。 后续再看看怎么用 http 协议返回二进制数据。

lealone-client的api文档有没有?是JDBC执行SQL方式吗?

可以这样定义服务:

create service if not exists hello_service (
  say_hello(name varchar) varchar
) package 'org.lealone.examples.rpc' implement by 'org.lealone.examples.rpc.HelloServiceImpl' generate code './src/main/java';

会自动生成 org.lealone.examples.rpc.HelloService 接口和其他默认实现类,然后像下面这样调用即可:

    public static void main(String[] args) {
        String url = "jdbc:lealone:tcp://localhost:9210/lealone?user=root";
        HelloService helloService = HelloService.create(url);
        helloService.sayHello("lealone");
    }

这种基于服务接口调用服务的方式内部就是用 lealone-client,但不需要学习 lealone-client 的 API 的。

codefollower avatar Aug 16 '23 02:08 codefollower