kintone Java Client(推荐使用)

aki发表于:2020年05月07日 10:47:56更新于:2023年04月07日 09:32:50

Index

概要

kintone Java Client是指对使用Java语言进行kintone REST API自定义时的一些必要处理进行了封装的库。
基本上涵盖了kintone中可使用的REST API。 

有了kintone Java Client,您只要调用此库提供的方法,即可执行kintone REST API,可以大大减少代码量。
另外,使用IntelliJ等 IDE还可以自动补全代码。

此篇文档介绍kintone Java Client(以下简称本Client)的导入方法和基本的使用方法。关于kintone Java Client所提供的方法的使用范例,请参考范例代码合集

关于此客户端库的技术支持方针请参考这里

GitHub

https://github.com/kintone/kintone-java-client 

许可证

MIT 许可证

限制事项

不支持安卓。

文档

https://kintone.github.io/kintone-java-client/javadoc/

导入方法

Gradle项目的情况

在build.gradle内添加以下内容。
※ 第2行的版本改为要导入的kintone Java Client的版本。

dependencies {    
  implementation 'com.kintone:kintone-java-client:0.9.0'    
}

Maven项目的情况

在pom.xml内添加以下内容。
※ 第4行的version请输入要导入的kintone Java Client的版本。

<dependency>    
    <groupId>com.kintone</groupId>    
    <artifactId>kintone-java-client</artifactId>    
    <version>0.9.0</version>    
</dependency>

使用方法

以下介绍本Client的使用方法。另外,还可参考Javadoc

以下例子是获取kintone记录,将记录ID输出到console。

package hello;

import com.kintone.client.KintoneClient;
import com.kintone.client.KintoneClientBuilder;
import com.kintone.client.RecordClient;
import com.kintone.client.model.record.Record;

public class App {
  public static void main(String[] args) throws Exception {
    String baseUrl = "https://{your-domain}.cybozu.cn";
    String apiToken = "token";
    long appId = 1L;
    long recordId = 10L;

    System.out.println("Hello, kintone Java Client");

    // 用户API令牌验证
    try (KintoneClient client = KintoneClientBuilder.create(baseUrl).authByApiToken(apiToken).build()) {
      // 获取用于操作记录的client
      RecordClient recordClient = client.record();
      // 从kintone获取记录
      Record record = recordClient.getRecord(appId, recordId);
      // 输出记录ID
      System.out.println(record.getId());
    }
  }
}

※ 实际编程时,请不要将域名及验证信息等直接写在代码中,而是在Java属性文件等中进行定义后再读入。

※ 以上只是作为示范用的代码,因此省略了抛出例外时的处理。在实际的程序里,请务必要采取适当的错误处理。

 

请根据以下步骤来使用本Client对kintone进行操作。

步骤1. 生成kintone Client

使用KintoneClientBuilder生成KintoneClient。

设置验证信息

本Client支持密码验证和 API令牌验证

用密码验证创建 kintone Client

String baseUrl = "https://{your-domain}.cybozu.cn";    
String username = "username";    
String password = "password";    

KintoneClient client = KintoneClientBuilder    
                       // 设置访问对象的kintone URL    
                       .create(baseUrl)    
                       // 设置验证所需的用户名和密码    
                       .authByPassword(username, password)    
                       .build();

用API令牌验证创建 kintone Client

String baseUrl = "https://{your-domain}.cybozu.cn";    
String apiToken = "token";  
  
KintoneClient client = KintoneClientBuilder    
                       // 设置访问对象的kintone URL    
                       .create(baseUrl)    
                       // 设置验证时所需的API令牌    
                       .authByApiToken(apiToken)    
                       .build();

也可设置客户证书和Basic验证信息。

设置客户证书

// 使用客户证书时,请在域名后加上.s    
String baseUrl = "https://{your-domain}.s.cybozu.cn";    
String apiToken = "token";

KintoneClient client = KintoneClientBuilder    
                       .create(baseUrl)    
                       .authByApiToken(apiToken)    
                       // 设置客户证书和密码    
                       .withClientCertificate(Paths.get("/path/to/ file"), "password")    
                       .build();

设置Basic验证

String baseUrl = "https://{your-domain}.cybozu.cn";    
String apiToken = "token";
 
KintoneClient client = KintoneClientBuilder    
                       .create(baseUrl)    
                       .authByApiToken(apiToken)    
                       // 设置Basic验证所需的用户名和密码    
                       .withBasicAuth("basic", "password")    
                       .build();

如除了kintone的URL和验证信息之外,其他没有需要设置的项目,使用defaultClient方法可以更加简单地创建KintoneClient。

关闭处理

KintoneClient内部带有HTTP连接。
处理结束后,KintoneClient的任务就完成了,这时请调用close()方法关闭处理。

其他

  • KintoneClientBuilder中还可以设置连接超时以及代理等各项目。

  • 还可以使用setAppendixUserAgent方法向 User-Agent添加字符。
    如设置了用于识别程序名称及处理内容的值,以后发生性能等问题时,才望子将可更加方便地进行调查,加快问题的解决。请务必设置一下。

步骤2.获取操作对象的Client

生成KintoneClient后,获取要进行操作的对象的Client。
操作对象里有[应用]、[记录]、[空间]、[文件]、[schema(API的schema信息)]。

try (KintoneClient client = getKintoneClient()) {    
  //获取操作应用时所需的Client    
  AppClient appClient = client.app();  
    
  // 获取操作记录所需的Client    
  RecordClient recordClient = client.record(); 
     
  // 获取操作空间所需的Client    
  SpaceClient spaceClient = client.space(); 
     
  // 获取操作文件所需的Client    
  FileClient fileClient = client.file(); 
     
  //获取操作schema所需的Client    
  SchemaClient schemaClient = client.schema();    
}

上面代码中用到了 try-with-resources ,可以在处理结束时自动调用KintoneClient#close()方法。

如果没有什么特别的理由,推荐使用 try-with-resources ,以确保处理结束后能正确调用close()。

※ 本例的前提是存在一个名称为getKintoneClient()、用于获取KintoneClient的方法。

步骤3. 调用方法,操作kintone

创建好操作对象的Client之后,调用操作方法。

操作kintone时,将请求参数传给kintone REST API各API相对应的方法。部分方法可以用更加简单的方法。

方法1:将请求类传递给各API相对应的方法,操作kintone

将请求类“API 名 + Request”传递给操作对象的Client,然后获取应答类的实例“API 名 + ResponseBody”。

下面是获取记录 API(get record)的例子。
请求类:GetRecordRequest
应答类:GetRecordResponseBody

// 生成获取记录的请求类的实例    
GetRecordRequest req = new GetRecordRequest();    
req.setApp(3L); // 设置获取对象的应用ID (应用ID为long类型)    
req.setId(15L); // 设置获取对象的记录ID (记录ID为long类型)
 
// 传递给记录client,调用API    
GetRecordResponseBody resp = client.record().getRecord(req); 

// 从应答中获取记录对象    
Record record = resp.getRecord();    

// 显示记录ID    
System.out.println(record.getId());

方法2: 使用更加方便的方法,操作kintone

使用getRecord方法更方便,上面的代码可精简如下:

// 使用更改简单的方法获取记录信息    
Record record = client.record().getRecord(3L, 15L);

// 显示记录ID    
System.out.println(record.getId());

最后

通过使用kintone Java Client,在使用Java进行批处理或手机应用开发时,可更轻松地执行kintone REST API。

关于kintone Java Client的使用方法请参考范例代码合集

更新记录

请参考此页面以获取库的更新信息。

  • 2020年6月1日将导入方法由使用本地的jar文件的方法改成使用中央仓库的方法

此Tips在2020年2月版 kintone以及 kintone Java Client v0.9中确认过。


回复(10)

  • 谢谢你一直对我的各种问题的回答,我的JAVA程序,终于连上kintone了。

    引用 betsy_yan 的回复:

    来宾空间的URI中是带有“guest”的,可以从这上来判断如何获取使用请参考:https://cybozudev.kf5.com/hc/kb/article/1303901/

  • betsy_yan

    来宾空间的URI中是带有“guest”的,可以从这上来判断

    如何获取使用请参考:

    https://cybozudev.kf5.com/hc/kb/article/1303901/

    引用 kintoneapi 的回复:

    1.由于kintone中要是访问来宾空间的话,需要指定来宾空间ID,怎么看一个kintone中的用户是来宾账号,或者要调用的app在来宾空间?

  • betsy_yan

    请查看以下链接:

    https://cloud.tencent.com/developer/article/1008263

    引用 kintoneapi 的回复:

    2.kintone以外的工程,只是通过eclipse,建了一个最基本的Java工程,既不是gradle项目,也不是maven项目,只有project和classpath文件那种,在工程中添加kintone Java client 的版本号是必须的吗?如果是的话,我这个工程应该怎么添加版本号?

  • betsy_yan

    看下以下链接:

    https://github.com/kintone/kintone-java-client/blob/master/build.gradle


    implementation 'org.apache.httpcomponents:httpclient:4.5.13'

        implementation 'org.apache.httpcomponents:httpmime:4.5.13'

        implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.1'

        implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.1'

    引用 的回复:

    请问一下,kintone java client jar包中引用的apache的http client jar包的版本是多少?

  • 请问一下,kintone java client jar包中引用的apache的http client jar包的版本是多少?

    我现在从网上下的是4.3.1版本

    结果发现kintone jar中以下代码

    HttpClientBuilder clientBuilder = HttpClients.custom();
    clientBuilder.setSSLContext(sslContext);

    可是在apache的httpclient jar中的HttpClientBuilder类中

    有一个方法是【setSslcontext(SSLContext)】

    会不会是因为两个方法的大小写不一致,我现在程序一直报错?

    麻烦帮我解答一下。谢谢。


    Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.impl.client.HttpClientBuilder.setSSLContext(Ljavax/net/ssl/SSLContext;)Lorg/apache/http/impl/client/HttpClientBuilder;
     at com.kintone.client.InternalClientImpl.createHttpClient(InternalClientImpl.java:97)
     at com.kintone.client.InternalClientImpl.<init>(InternalClientImpl.java:74)
     at com.kintone.client.KintoneClientBuilder.build(KintoneClientBuilder.java:276)
     at test.test2.main(test2.java:17)




    引用 betsy_yan 的回复:

    kintone用的版本也是2.13.1。你可以再检查一下你的配置看看。

  • kintoneapi

    这个问题解决了,可是这几个被调用的jar里面又调用了其他的jar,我都需要一点一点上网找对应的jar文件,导入到我的工程中吗?

    这样很容易因为我不知道你们开发时,用到的所有jar的版本号,至使版本号不一致而报错。

    请问,你们在哪里有放一个,开发kintone Java client jar时,用到的其他所有jar的一个集合的下载吗?谢谢。

    引用 betsy_yan 的回复:

    kintone用的版本也是2.13.1。你可以再检查一下你的配置看看。

  • kintoneapi

    1.由于kintone中要是访问来宾空间的话,需要指定来宾空间ID,怎么看一个kintone中的用户是来宾账号,或者要调用的app在来宾空间?


    2.kintone以外的工程,只是通过eclipse,建了一个最基本的Java工程,既不是gradle项目,也不是maven项目,只有project和classpath文件那种,在工程中添加kintone Java client 的版本号是必须的吗?

    如果是的话,我这个工程应该怎么添加版本号?



  • betsy_yan

    要实现“是不是只要用kintone java client这个jar包中提供的方法,就可以开发那个java程序了。”

    无需导入“import com.fasterxml.jackson.databind.module.SimpleModule;”

    你可以看下这个:

    https://kintone.github.io/kintone-java-client/getting-started.html

    引用 的回复:

    我要编写一个kintone以外的java程序,通过调用kintone的api,实现对某个app中添加记录的功能。是不是只要用kintone java client这个jar包中提供的方法,就可以开发那个java程序了。关于token验证和权限什么的,我只要把对应的url,以及用户名和密码都按照jar中提供的方法的格式,设置好就可以了?还需要做什么其他设置吗?比如OAuth客户端身份验证,或者其他验证方式?我现在只用kintone java client jar包提供的方法,进行java系统的开发,在创建KintoneClient对象时,报错【Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/module/SimpleModule】     

  • betsy_yan

    kintone用的版本也是2.13.1。你可以再检查一下你的配置看看。

    引用 的回复:

    如果你们也觉得是这个问题的话,可以告诉我一下那三个jar,当时用的版本吗?

  • 我要编写一个kintone以外的java程序,通过调用kintone的api,实现对某个app中添加记录的功能。

    1. 是不是只要用kintone java client这个jar包中提供的方法,就可以开发那个java程序了。

      关于token验证和权限什么的,我只要把对应的url,以及用户名和密码都按照jar中提供的方法的格式,

      设置好就可以了?

      还需要做什么其他设置吗?比如OAuth客户端身份验证,或者其他验证方式?

    2. 我现在只用kintone java client jar包提供的方法,进行java系统的开发,在创建KintoneClient对象时,报错【Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/module/SimpleModule】

           代码如下:

            

    package test;

    import com.fasterxml.jackson.databind.module.SimpleModule;
    import com.kintone.client.KintoneClient;
    import com.kintone.client.KintoneClientBuilder;
    import com.kintone.client.model.record.Record;


    public class test2 {

     public static void main(String[] args) {
      String baseUrl = "https://***.cybozu.com";
      String user = "******";
      String pws = "********";
      try {
            KintoneClient client = KintoneClientBuilder.create(baseUrl).
              authByPassword("****", "******").withBasicAuth(user, pws).build();
            System.out.print("aaa");
            SimpleModule aaa = new SimpleModule();
           
      }catch(Exception e){
       
      }
     }

    }


    其中用户名和密码等信息,用*做了替换。

    用户名和密码在真实的kintone系统中,试验过,可以正确登录系统。

    kintone java client1.2.0 jar包中确实没有【SimpleModule】类,应该是kintone java client工程引用的其他jar包

    在kintone java client1.2.0 jar的下载页面中,只有这个jar,没有jackson-databind.jar。

    我自己从网上找到了

    jackson-annotations-2.13.1.jar

    jackson-core-2.13.1.jar

    jackson-databind-2.13.1.jar

    并且导入到了我的java工程中,可是再执行时,错误没有发生变化。

    你们知道问题原因吗?

    我猜有可能是因为我导入的三个jar包,跟你们当时开发kintone java client jar包时,引用的上面三个jar的版本不一致。

    如果你们也觉得是这个问题的话,可以告诉我一下那三个jar,当时用的版本吗?