使用zabbix的java api来对主机进行删除时的bug说明

在最近的代码开发中,通过java调用zabbix的api来实现对主机(host)的删除(host.delete
),问题出现在当在代码中传入hostid的时候,请求发送异常,异常信息是no permission什么的(没截图,手动求原谅)。找了一下午,终于找到了原因

1,首先说明一下我在开发过程中引用的是大神将api封装好的jar包,链接地址如下:
http://www.mvnrepository.com/artifact/com.github.0312birdzhang/Zabbix4j
这也是maven的一个中央仓库,喜欢的朋友也可以收藏一下。
按照说明在项目中添加好这个jar包就行了


    com.github.0312birdzhang
    Zabbix4j
    0.1.8

2,说重点,因为公司的zabbix服务器是3.0版本的,而大神封装好的jar包是基于zabbix1.8版本的。这也是我在开发中遇到的bug之一,详情如下:

在zabbix官方api中(https://www.zabbix.com/documentation/3.0/manual/api/reference/host/delete)
通过调用api来实现对主机的删除的json格式如下:

{
    "jsonrpc": "2.0",
    "method": "host.delete",
    "params": [
        "13",
        "32"
    ],
    "auth": "038e1d7b1735c6a5436ee9eae095879e",
    "id": 1
}

这里可以看出在params内部传入的host的id值即可,但是借助jar包帮助我们生成的json格式如下:

{
    "jsonrpc": "2.0",
    "method": "host.delete",
    "params": [
        "hostid":"13",
        "hostid":"32"
    ],
    "auth": "038e1d7b1735c6a5436ee9eae095879e",
    "id": 1
}

那么在发送请求的时候就会报出错误:no permission…….

3,原因找到了,解决办法就有了,在jar包中找到了发送host.delete请求的封装json数据的代码,贴出代码:

public class HostDeleteRequest extends ZabbixApiRequest {
    private List params = new ArrayList();

    public HostDeleteRequest() {
        setMethod("host.delete");
    }
    public List getParams() {
        return params;
    }
    public void setParams(List params) {
        this.params = params;
    }
    public void addParams(int hostid) {
        this.params = ZbxListUtils.add(this.params, new Params(hostid));
    }
    public class Params {
        private Integer hostid;
    public Params(Integer hostid) {
        this.hostid = hostid;
    }
        public Params() {
        }
    }
}

可以看出这个类将我们需要删除的hostid封装成了一个Params对象,因此在发送json的时候显示
的是 “hostid”:”234” 这种格式。
解决办法有两种:

一种是将源码包下载下来,将List< params > 更改为 List < Integer >。然后打成新jar包放在项目中即可

一种就是仿照这个HostDelteRequest类,自己重新写一个类,不过将参数List< params > 改为 List,然后发送json的时候引用这个类就可以了。(这种方式需要更改两个文件,比较麻烦,推荐使用第一种)

这两种更改方式表明我们发送的json数据是基本型,不是对象。

你可能感兴趣的:(框架学习)