簡體   English   中英

DynamoDb查詢枚舉

[英]DynamoDb querying Enum

我是dynamoDB的新手,這個問題可能是青少年問題。

我正在嘗試從表中查詢項目,但dynamo api無法將查詢json結果轉換為類實例,因為類中存在枚舉變量成員。

我的課程結構:[請注意,RequestStage是Enum成員]

@DynamoDBTable(tableName = "LoadInfoProvider")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public final class LoadInfoProvider {

/** The load request ID. */
@DynamoDBRangeKey
private String loadRequestID;

/** The load request creation id. */
@DynamoDBHashKey
private String loadRequestCreationId;

/** The carrier ID. */
private String carrierID;

/** The carrier pool. */
private String carrierPool;

/** The carrier details. */
private CarrierDetail carrierDetails;

/** The driver assignment required. */
private Boolean driverAssignmentRequired;

/** The driver pool. */
private String driverPool;

/** The trailer attachment required. */
private Boolean trailerAttachmentRequired;

/** The request type. */
private String requestType;

/** The request stage. */
private RequestStage requestStage;

/** The created time. */
private String createdTime;

/** The consumed time. */
private String consumedTime;

/** The provider status. */
private String providerStatus;

/** The is consumed. */
private Boolean isConsumed;

/** The request status. */
private RequestStatus requestStatus;

/** The trip. */
private Trip trip;
}

RequestStageEnum:

@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@DynamoDBDocument
public enum RequestStage {

/** The initiated. */
INITIATED("initiated"),

/** The passed. */
PASSED("passed"),

/** The failed. */
FAILED("failed");

/** The value. */
@Getter
@Setter
private String value;

}

當我從該表中查詢某些內容時,出現以下錯誤。

線程“主”中的異常com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException:無法在com.amazonaws.services.dynamodbv2.datamodeling.ConversionSchemas $ StandardItemConverter.createObject(ConversionSchemas.java:614)處實例化類的新實例。 .amazonaws.services.dynamodbv2.datamodeling.ConversionSchemas $ StandardItemConverter.unconvert(ConversionSchemas.java:414)位於com.amazonaws.services.dynamodbv2.datamodeling.unmarshallers.ObjectUnmarshaller.unmarshall(ObjectUnmarshaller.com.at:54) .dynamodbv2.datamodeling.unmarshallers.NullableUnmarshaller.unmarshall(NullableUnmarshaller.java:46)位於com.amazonaws.services.dynamodbv2.datamodeling.ConversionSchemas $ StandardItemConverter.unmarshall(ConversionSchemasmodelzon.data.zon.dy.na.dy.com。 .ConversionSchemas $ StandardItemConverter.unconvert(ConversionSchemas.java:426)在com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.privateMarshallIntoObject(D ynamoDBMapper.java:630)在com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.marshallIntoObjects(DynamoDBMapper.java:661)在com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList。(PaginatedQueryList。位於com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.query(DynamoDBMapper.java:1844)的amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.java:1856 com.amazon.optimus.dynamoHelper.DynamoDBUtil.main(DynamoDBUtil.java:164)上的queryRecord(DynamoDBUtil.java:112)原因:java.lang.InstantiationException:java.lang上的com.amazon.optimus.enums.RequestStage。 com.amazonaws.services.dynamodbv2.datamodeling.ConversionSchemas $ StandardItemConverter.createObject(ConversionSchemas.java:611)上的Class.newInstance(Class.java:427)... 12更多原因:java.lang.NoSuchMethodException:com.amazon JA的java.lang.Class.getConstructor0(Class.java:3082)的.optimus.enums.RequestStage。() va.lang.Class.newInstance(Class.java:412)...還有13個

從異常可以明顯看出,java無法實例化枚舉。 我如何解決這個問題並使它正常工作? 非常感謝您的幫助。

您需要使用@DynamoDBMarshalling注釋字段requestStage

假設RequestStage是一個enum ,則封送員可能是這樣的:

    public class RequestStageMarshaller implements DynamoDBMarshaller<RequestStage> {

        @Override
        public String marshall(RequestStage requestStage) {
            return requestStage.toString();
        }

        @Override
        public RequestStage unmarshall(Class<RequestStage> clazz, String 
requestStage) {
            return RequestStage.valueOf(requestStage);
        }

    }

然后,您可以這樣注釋您的requestStage字段:

@DynamoDBMarshalling(marshallerClass = RequestStageMarshaller.class)
private RequestStage requestStage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM