如何使用 Java SDK for Cumulocity Api 中的 MeasurementFilter 反转测量数据?
how to reverse the measurement data using MeasurementFilter in Java SDK for Cumulocity Api?
我正在使用以下代码获取特定设备的最新测量 API 详细信息,但它没有按降序返回数据:
import com.cumulocity.sdk.client.measurement.MeasurementFilter;
import com.cumulocity.sdk.client.Platform;
import com.cumulocity.rest.representation.measurement.MeasurementRepresentation;
@Autowired
private Platform platform;
MeasurementFilter filter = new MeasurementFilter().byType("type").bySource("deviceId").byDate(fromDate,dateTo);
Iterable<MeasurementRepresentation> mRep = platform.getMeasurementApi().getMeasurementsByFilter(filter).get().elements(1);
List<MeasurementRepresentation> mRepList = StreamSupport.stream(mRep.spliterator(), false).collect(Collectors.toList());
...
我们可以在 Http REST url 调用中使用 'revert=true' 获取最新数据..
../measurement/measurements?source={deviceId}&type={type}&dateTo=xxx&dateFrom=xxx&revert=true
我们如何使用 'revert=true' 或其他方式获取测量详细信息,以便使用 Cumulocity Java SDK?在此感谢您的帮助。
SDK 目前没有用于还原参数的开箱即用的 QueryParam,因此您必须自己创建它:
import com.cumulocity.sdk.client.Param;
public class RevertParam implements Param {
@Override
public String getName() {
return "revert";
}
}
然后您可以将它与您的查询结合起来。因此,当您在 MeasurementCollection 上使用 get() 时,您需要包含您的查询参数。您目前没有传递任何东西,但您可以传递 pageSize 和任意数量的 QueryParam。
private Iterable<MeasurementRepresentation> getMeasurementByFilterAndQuery(int pageSize, MeasurementFilter filter, QueryParam... queryParam) {
MeasurementCollection collection = measurementApi.getMeasurementByFilter(filter);
Iterable<MeasurementRepresentation> iterable = collection.get(pageSize, queryParam).allPages();
return iterable;
}
private Optional<MeasurementRepresentation> getLastMeasurement(GId source) {
QueryParam revertQueryParam = new QueryParam(new RevertParam(), "true");
MeasurementFilter filter = new MeasurementFilter()
.bySource(source)
.byFromDate(new DateTime(0).toDate());
Iterable<MeasurementRepresentation> iterable = measurementRepository.getMeasurementByFilterAndQuery(1, filter, revertQueryParam);
if (iterable.iterator().hasNext()) {
return Optional.of(iterable.iterator().next());
} else {
return Optional.absent();
}
}
扩展您的代码可能如下所示:
QueryParam revertQueryParam = new QueryParam(new RevertParam(), "true");
MeasurementFilter filter = new MeasurementFilter().byType("type").bySource("deviceId").byDate(fromDate,dateTo);
Iterable<MeasurementRepresentation> mRep = platform.getMeasurementApi().getMeasurementsByFilter(filter).get(1, revertQueryParam);
List<MeasurementRepresentation> mRepList = StreamSupport.stream(mRep.spliterator(), false).collect(Collectors.toList());
您对元素所做的操作并没有错,但它并未将 API 调用限制为仅 return 一个值。它将使用 defaultPageSize (=5) 进行查询,然后在 Iterable 级别将其限制为仅 return 一个。当您需要比 maxPageSize (=2000) 更多的元素时,elements() 函数更适合使用。然后它将处理对其他页面的自动请求,您可以循环遍历 Iterable。
我正在使用以下代码获取特定设备的最新测量 API 详细信息,但它没有按降序返回数据:
import com.cumulocity.sdk.client.measurement.MeasurementFilter;
import com.cumulocity.sdk.client.Platform;
import com.cumulocity.rest.representation.measurement.MeasurementRepresentation;
@Autowired
private Platform platform;
MeasurementFilter filter = new MeasurementFilter().byType("type").bySource("deviceId").byDate(fromDate,dateTo);
Iterable<MeasurementRepresentation> mRep = platform.getMeasurementApi().getMeasurementsByFilter(filter).get().elements(1);
List<MeasurementRepresentation> mRepList = StreamSupport.stream(mRep.spliterator(), false).collect(Collectors.toList());
...
我们可以在 Http REST url 调用中使用 'revert=true' 获取最新数据..
../measurement/measurements?source={deviceId}&type={type}&dateTo=xxx&dateFrom=xxx&revert=true
我们如何使用 'revert=true' 或其他方式获取测量详细信息,以便使用 Cumulocity Java SDK?在此感谢您的帮助。
SDK 目前没有用于还原参数的开箱即用的 QueryParam,因此您必须自己创建它:
import com.cumulocity.sdk.client.Param;
public class RevertParam implements Param {
@Override
public String getName() {
return "revert";
}
}
然后您可以将它与您的查询结合起来。因此,当您在 MeasurementCollection 上使用 get() 时,您需要包含您的查询参数。您目前没有传递任何东西,但您可以传递 pageSize 和任意数量的 QueryParam。
private Iterable<MeasurementRepresentation> getMeasurementByFilterAndQuery(int pageSize, MeasurementFilter filter, QueryParam... queryParam) {
MeasurementCollection collection = measurementApi.getMeasurementByFilter(filter);
Iterable<MeasurementRepresentation> iterable = collection.get(pageSize, queryParam).allPages();
return iterable;
}
private Optional<MeasurementRepresentation> getLastMeasurement(GId source) {
QueryParam revertQueryParam = new QueryParam(new RevertParam(), "true");
MeasurementFilter filter = new MeasurementFilter()
.bySource(source)
.byFromDate(new DateTime(0).toDate());
Iterable<MeasurementRepresentation> iterable = measurementRepository.getMeasurementByFilterAndQuery(1, filter, revertQueryParam);
if (iterable.iterator().hasNext()) {
return Optional.of(iterable.iterator().next());
} else {
return Optional.absent();
}
}
扩展您的代码可能如下所示:
QueryParam revertQueryParam = new QueryParam(new RevertParam(), "true");
MeasurementFilter filter = new MeasurementFilter().byType("type").bySource("deviceId").byDate(fromDate,dateTo);
Iterable<MeasurementRepresentation> mRep = platform.getMeasurementApi().getMeasurementsByFilter(filter).get(1, revertQueryParam);
List<MeasurementRepresentation> mRepList = StreamSupport.stream(mRep.spliterator(), false).collect(Collectors.toList());
您对元素所做的操作并没有错,但它并未将 API 调用限制为仅 return 一个值。它将使用 defaultPageSize (=5) 进行查询,然后在 Iterable 级别将其限制为仅 return 一个。当您需要比 maxPageSize (=2000) 更多的元素时,elements() 函数更适合使用。然后它将处理对其他页面的自动请求,您可以循环遍历 Iterable。