[英]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.