Java Couchbase JsonArray不支持的类型

时间:2017-02-07 04:42:01

标签: java spring-data couchbase

我在尝试从CouchBase获取对象时遇到异常。我使用Spring Data Repository来查询数据。我将数据保存到CouchBase,没有任何例外。我需要按dataTime查询数据,该数据应在dateBeforedateAfter范围内。 我有这样的Java对象:

@Document
public class DataObject{

    @Id
    @Field
    private String dataId;
    @Field
    private boolean isEnabled;
    @Field
    private BigDecimal price;
    @Field
    private LocalDateTime dataTime;
    @Field
    private Currency currency;

    public DataObject() {
    }

    public DataObject(String dataId, boolean isEnabled, BigDecimal price, Date dataTime, Currency currency) {
        this.dataId = dataId;
        this.dataId = dataId;
        this.price = price;
        this.dataTime = dataTime;
        this.currency = currency;
    }
}

我有这样的存储库界面:

public interface DataObjectRepository extends CrudRepository<DataObject, String> {

    @Query("#{#n1ql.selectEntity} WHERE dataTime BETWEEN $1 AND $2 AND #{#n1ql.filter}")
    List<DataObject> getDataObjectsBetweenDates(LocalDateTime beforeTime, LocalDateTime afterTime);

}

当我运行此查询时,我得到一个例外:

  

org.springframework.web.util.NestedServletException:Request   处理失败;嵌套异常是   java.lang.IllegalArgumentException:JsonArray的不支持的类型:   class java.time.LocalDateTime

我尝试使用Timestamp,旧日期而不是LocalDateTime,但我得到了相同的例外,但邮件中有不同的类。

我是CouchBase的新手,所以感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您遇到了此异常,因为Couchbase Java客户端尝试将您的beforeTime添加到parameters数组,但是无法执行此操作。 LocalDateTime类型不受支持,并且不满足客户端内部的此检查要求:

public static boolean checkType(Object item) {
    return item == null
        || item instanceof String
        || item instanceof Integer
        || item instanceof Long
        || item instanceof Double
        || item instanceof Boolean
        || item instanceof BigInteger
        || item instanceof BigDecimal
        || item instanceof JsonObject
        || item instanceof JsonArray;
}

LocalDateTime保存到沙发床时,spring会将其转换为Long

Date.from(source.atZone(systemDefault()).toInstant()).getTime();

因此,您还可以使用这种方法转换日期并发送Long参数而不是LocalDateTime