Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DynamoDBMarshaller到枚举列表的字符串列表_Java_Enums_Amazon Dynamodb - Fatal编程技术网

Java DynamoDBMarshaller到枚举列表的字符串列表

Java DynamoDBMarshaller到枚举列表的字符串列表,java,enums,amazon-dynamodb,Java,Enums,Amazon Dynamodb,我已经了解了如何创建一个通用的DynamoDBMarshaller类,该类用于编组任何枚举类。但是,这对枚举列表不起作用 我知道我可以编写一个处理枚举列表的封送拆收器,但我必须将其作为字符串写入dynamo(基本上是jsonify列表)。这并不理想。对于其他类类型,可以使用@DynamoDBDocument对它们进行注释,但这不适用于枚举类型 那么,有没有一种方法可以在dynamo中将我的枚举类作为字符串列表进行整理?我相信您需要指定要序列化的确切枚举类(并且不能做一般性的事情)。然后,您可以使

我已经了解了如何创建一个通用的DynamoDBMarshaller类,该类用于编组任何枚举类。但是,这对枚举列表不起作用

我知道我可以编写一个处理枚举列表的封送拆收器,但我必须将其作为字符串写入dynamo(基本上是jsonify列表)。这并不理想。对于其他类类型,可以使用
@DynamoDBDocument
对它们进行注释,但这不适用于枚举类型


那么,有没有一种方法可以在dynamo中将我的枚举类作为字符串列表进行整理?

我相信您需要指定要序列化的确切枚举类(并且不能做一般性的事情)。然后,您可以使用库(如)为您执行序列化:

package com.example.shared.models.marshallers;

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.type.CollectionType;

import java.util.List;

public class EnumListMarshaller implements DynamoDBMarshaller<List<ENUM_NAME>> {
    private static final ObjectMapper mapper = new ObjectMapper();
    private static final ObjectWriter writer = mapper.writer();

    @Override
    public String marshall(List<ENUM_NAME> obj) {
        try {
            return writer.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("Failed to marshall list of enums to dynamo");
        }
    }

    @Override
    public List<ENUM_NAME> unmarshall(Class<List<ENUM_NAME>> clazz, String json) {
        final CollectionType type = mapper.getTypeFactory().constructCollectionType(List.class, ENUM_NAME.class);
        try {
            return mapper.readValue(json, type);
        } catch (Exception e) {
            throw new RuntimeException("Failed to unmarshall list of enums from dynamo");
        }
    }
}
其中“ENUM_NAME”是枚举类

@DynamoDBMarshalling(marshallerClass = EnumListMarshaller.class)