这个非常简单的请求令我头疼......
我正在尝试使用Jersey客户端将POST
数据导入InfluxDB。
他们想要这种格式的数据
[
{
"name": "log_lines",
"columns": ["time", "line"],
"points": [
[1400425947368, "here's some useful log info"]
]
}
]
所以我的实体看起来像这样:
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class InfluxDbStat implements Serializable {
private static final long serialVersionUID = 1L;
@XmlElement
public String name;
@XmlElement
public String[] columns;
@XmlElement
public String[] points;
}
转换为:
{
"name":"pointcut_performance",
"columns":[
"time",
"pointcut",
"length"
],
"points":[
"1412098229880",
"com.xxx.notes.restapi.NoteTakerController.postNote(ApiNote)",
"105"
]
}
我正在调用这样的端点:
influxDbResource.queryParam("u", influxDbUser).queryParam("p", influxDbPassword).queryParam("time_precision", "ms").accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(influxDbStat);
如何将方括号打印为根?
答案 0 :(得分:1)
我会发布我的回答,希望有一天有类似问题的人能够从中受益。
首先,我切换到官方的InfluxDB Java客户端,实际上工作正常。我很高兴使用这个解决方案,但它涉及到另一个依赖我的项目,我不是特别高兴。还有一个开放的bug,其中毫秒被解释为微秒(https://github.com/influxdb/influxdb-java/issues/13)。有点是派对破坏者。
第二种方式是一点点诡计。 Sotirios Delimanolis在评论中为我提供了线索。首先,将响应对象包装在一个数组中:new InfluxDbStat[]{influxDbStat};
然后,拧紧JAXB。我找不到任何一个marshallers,杰克逊,Jettison,Moxy,(可悲的是,甚至是可靠的Eclipse Moxy)都没能产生“正常”的兴趣 - 像行家一样的JSON。尽管如此,我们已经将GSON作为依赖项传递过来了,所以我们决定只使用声明的依赖项并使用它。所以,只需做一个gson.toJson(new InfluxDbStat[]{influxDbStat})
,你就可以了!
我们在第一篇文章中发现的另一个错误是points
变量实际上需要声明为public int[][] points
,因为InfluxDB允许您一次提交多行。
无论如何祝你好运并且快乐的InfluxDBing!