公共静态类MyJsonObject{私人字符串消息;// JSON解析所需的空构造函数。公共MyJsonObject () {}公共MyJsonObject (字符串消息){这.message =消息;}公共无效setMessage (字符串消息){这.message =消息;}公共字符串getMessage () {返回消息;}}
本页解释了如何在Jenkins插件中通过HTTP API公开Json对象,使用必威国际有限公司得到
而且帖子
动词。本页还展示了如何使用JenkinsRules来测试它必威国际有限公司必威国际有限公司jenkins-test-harness.
该对象表示在HTTP服务器(Jenkins)和客户机(例如curl)之间交换的结构化数据。必威国际有限公司我们使用一个非常简单的java对象作为示例,但在生产代码中,您将有更复杂的对象来操作。
注意,如果使用Stapler (JSONObject)编组和解组JSON,则需要一个空构造函数。
公共静态类MyJsonObject{私人字符串消息;// JSON解析所需的空构造函数。公共MyJsonObject () {}公共MyJsonObject (字符串消息){这.message =消息;}公共无效setMessage (字符串消息){这.message =消息;}公共字符串getMessage () {返回消息;}}
本部分将展示如何公开返回结构化JSON响应的HTTP GET。
/ * * / (1)进口hudson.model.RootAction;进口net.sf.json.JSONObject;进口org.junit.Rule;进口org.junit.Test;进口org.kohsuke.stapler.HttpResponse;进口org.kohsuke.stapler.QueryParameter;进口org.kohsuke.stapler.WebMethod;进口org.kohsuke.stapler.json.JsonBody;进口org.kohsuke.stapler.json.JsonHttpResponse;进口org.kohsuke.stapler.verb.GET;进口org.kohsuke.stapler.verb.POST;@Extension/ * * / (2)公共静态类JsonAPI实现了RootAction/ * (3) * /{@CheckForNull@Override公共字符串getIconFileName () {返回零;/ * (4) * /}@CheckForNull@Override公共字符串getDisplayName () {返回零;/ * * / (5)}@Override公共字符串getUrlName () {返回"custom-api";/ * * / (6)}@ get@WebMethod(name ="get-example")/ * * / (7)公共/ * (8) * /JsonHttpResponse getExample() {JSONObject响应= JSONObject. fromobject (新MyJsonObject ("我是詹金斯必威国际有限公司"));返回新JsonHttpResponse(反应,200);/ * * / (9)}@ get@WebMethod(name ="get-example-param")公共JsonHttpResponse getWithParameters (@QueryParameter(需要=真正的)字符串paramValue/ * * / (9)) {assertNotNull (paramValue);MyJsonObject MyJsonObject =新MyJsonObject ("我是詹金斯必威国际有限公司"+ paramValue);JSONObject响应= JSONObject. fromobject (myJsonObject);返回新JsonHttpResponse(反应,200);}@ get@WebMethod(name ="get-error500")公共JsonHttpResponse getError500 () {* / / * (10)MyJsonObject MyJsonObject =新MyJsonObject ("误差是500");JSONObject jsonResponse = JSONObject. fromobject (myJsonObject);JsonHttpResponse error500 =新JsonHttpResponse (jsonResponse500);扔error500;}}
要使用的导入的非详尽列表。
一定是一个扩展被Jenkins发现作为一个服务。必威国际有限公司
这个类是RootAction的扩展。它是一种公开HTTP路径的方法,通常用于公开Web UI,但它也可以在不呈现HTML的情况下使用。
因为没有HTML/Jelly渲染,所以不需要图标。
因为没有HTML/Jelly呈现,所以不需要显示名称。
getUrlName ()
是JSON API的根。类中的每个WebMethod都以this作为前缀。
@ get
表示期望的HTTP方法,和@WebMethod
表示它正在接受HTTP请求。默认情况下,使用WebMethod的JAVA名称,但可以通过using指定不同的名称name =
JsonHttpResponse
的子类HttpResponse
指示响应内容将是JSON
可以在响应中设置HTTP状态。
该方法get-error500
添加到示例中,以演示如何将错误响应设置为JSON。
一个运行mvn现病史:
在插件中应该足以在本地运行它。假设詹金斯在必威国际有限公司http://localhost:8080/必威国际有限公司jenkins/,此时你应该有:
curl -XGET \ -w "\n STATUS:%{http_code}" \ http://localhost:8080/必威国际有限公司jenkins/custom-api/get-example-param?paramValue=hello {"message":"I am Jenkins hello"} STATUS:200
公共类JsonAPITest{@Rule公共必威国际有限公司JenkinsRule j =新必威国际有限公司JenkinsRule ();私人静态字符串GET_API_URL ="custom-api / get-example-param吗?paramValue =你好";@Test公共无效testGetJSON ()抛出异常{J必威国际有限公司enkinsRule。WebClient = j.createWebClient();//测试一个简单的GET,它应该回答200 OK和一个JSON必威国际有限公司JenkinsRule。响应= webClient.getJSON(GET_API_URL);assertTrue (response.getContentAsString () .contains ("我是Jen必威国际有限公司kinsRule你好"));assertequal (response.getStatusCode (),200);}@Test公共无效testAdvancedGetJSON ()抛出异常{//给定Jenkin必威国际有限公司s设置,用户为adminMockAuthorizationStrategy auth =新MockAuthorizationStrategy () .grant必威国际有限公司 (Jenkins.ADMINISTER) .everywhere (), ("管理");j.必威国际有限公司jenkins.setSecurityRealm (j.createDummySecurityRealm ());j.必威国际有限公司jenkins.setAuthorizationStrategy(身份验证);//我们需要设置WebClient,我们使用它来调用HTTP API必威国际有限公司JenkinsRule。WebClient = j.createWebClient();//默认情况下,如果状态码不是ok, WebClient抛出异常//因为我们想要断言错误状态代码,我们需要设置为false。webClient.setThrowExceptionOnFailingStatusCode (假);// -禁止未经认证的简单调用响应= webClient.getJSON (GET_API_URL);assertequal (response.getStatusCode (),403);// -相同的调用,但使用withBasicApiToken()进行认证应该没问题响应= webClient.withBasicApiToken ("管理") .getJSON (GET_API_URL);assertequal (response.getStatusCode (),200);}
本节将展示如何公开接受结构化JSON对象作为输入的HTTP端点,并使用JSON结构化对象进行响应。对于本例,使用相同的Object作为输入和输出,但也可以为响应使用不同的JSON结构。
从课堂开始JsonAPI
为GET示例提供,添加:
@POST@WebMethod(name ="创建")公共JsonHttpResponse创建(@JsonBodyMyJsonObject身体){//执行创建所需的任何逻辑//在示例中,我们将从请求中解析出的消息大写。JSONObject响应=新JSONObject ();response.put ("消息"body.message.toUpperCase ());返回新JsonHttpResponse(反应,200);}
一个运行mvn现病史:
在插件中应该足以在本地运行它。假设詹金斯在必威国际有限公司http://localhost:8080/必威国际有限公司jenkins/,此时你应该有:
写一个文件my.json
包含JSON主体:
{"message":"要发送的好消息"}
如果你需要一个用户和一个令牌:
进入Jenk必威国际有限公司ins UI
以用户身份登录,例如'myuser'
在右上角单击用户名
继续配置(针对此用户)
在“API令牌”部分创建一个新的令牌。
有关令牌的其他文档,请访问:
然后发送POST请求:
curl -XPOST \ -H "Content-Type: application/json" \——user myuser: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ http://loca必威国际有限公司lhost:40393/jenkins/testing-cli/create \——data "@/my。json" \ {"message":"要发送的漂亮消息"
从课堂开始JsonAPITest
对于GET示例,添加:
@Test公共无效testPostJSON ()抛出异常{//给定Jenkin必威国际有限公司s设置,用户为adminMockAuthorizationStrategy auth =新MockAuthorizationStrategy () .grant必威国际有限公司 (Jenkins.ADMINISTER) .everywhere (), ("管理");j.必威国际有限公司jenkins.setSecurityRealm (j.createDummySecurityRealm ());j.必威国际有限公司jenkins.setAuthorizationStrategy(身份验证);//我们需要设置WebClient,我们使用它来调用HTTP API必威国际有限公司JenkinsRule。WebClient = j.createWebClient();//测试一个经过认证的POST,它应该回答200 OK并返回相同的jsonMyJsonObject objectToSend =新MyJsonObject ("必威国际有限公司詹金斯才是出路!");必威国际有限公司JenkinsRule。响应= webClient .withBasicApiToken("管理") .postJSON ("testing-cli /创建"JSONObject.fromObject (objectToSend));//因为API返回相同的对象,我们断言输入消息。assertTrue (response.getContentAsString () .contains ("必威国际有限公司詹金斯才是出路!"));assertequal (response.getStatusCode (),200);}
对于熟悉REST/JSON概念的人,您可能想要使用其他HTTP动词,它应该可以工作,但因为通常只在Jenkins中必威国际有限公司得到
而且帖子
本页只展示了这两个动词的例子。
您可能还想使用一些HTTP状态代码,遵循HTTP约定,如201
对于已创建的,它也可以工作,上面的例子返回显式的200
status来显示如何管理返回的HTTP状态。有些状态是由Jenkins Core管理的,可能会自动必威国际有限公司返回,比如403
当请求中的用户不具有所需的权限或匿名时,或者404
当没有找到HTTP API时。
如果你不熟悉Jenkins的建筑,你可以去看看必威国际有限公司Jenkins应用程序的高级视图必威国际有限公司而在体系结构
对于Jenkins的HTTP层的更高级阅读,它由必威国际有限公司订书机.