AWS DynamoDB - 转换器类 - “错误请求,无法解析JSON”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS DynamoDB - 转换器类 - “错误请求,无法解析JSON”相关的知识,希望对你有一定的参考价值。

我已经制作了一个泛型方法,它是复杂类的转换器类,第二个是枚举类。我有复杂的Recipe类,所以我使用了@DynamoDBTypeConverted(converter = ObjectConverter.class)

这是我的转换器类:

public class ObjectConverter<T extends Object> implements DynamoDBTypeConverter<String, T> {

ObjectMapper objectMapper = new ObjectMapper();

@Override
public String convert(T object) {
    try {
        return objectMapper.writeValueAsString(object);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    throw new IllegalArgumentException("Unable to parse JSON");
}

@Override
public T unconvert(String object) {
    try {
        T unconvertedObject = objectMapper.readValue(object, new TypeReference<T>() {
        });
        return unconvertedObject;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

这是枚举的转换器类:

public class EnumConverter<T extends Object> implements DynamoDBTypeConverter<String, List<T>> {

@Override
public String convert(List<T> objects) {
    //Jackson object mapper
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        String objectsString = objectMapper.writeValueAsString(objects);
        return objectsString;
    } catch (JsonProcessingException e) {
        //do something
    }
    return null;
}

@Override
public List<T> unconvert(String objectsString) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        List<T> objects = objectMapper.readValue(objectsString, new TypeReference<List<T>>() {
        });
        return objects;
    } catch (JsonParseException e) {
        //do something
    } catch (JsonMappingException e) {
        //do something
    } catch (IOException e) {
        //do something
    }
    return null;
}

问题是当我尝试测试CRUDs方法时..我有addProduct方法,这个工作正常,我创建了addRecipe方法,它看起来几乎一样,但是我在Postman中发帖时遇到问题我收到了一个错误:“错误的请求,无法解析JSON“。

来自日志文件的信息:

“无法在[来源:{”id“:null,”name“:”test“,”labels“:[”GLUTEN_FREE“],”author“:{”中将START.OBJECT标记中的java.util.ArrayList实例反序列化名称“:”PlejerAnnnłn“,”id“:”testID2“},”media“:{”name“:”heheszki“,”url“:”http://blabla.pl“,”mediaType“:”IMAGE“},”recipeElements“ :{ “产品”:{ “ID”:927c3ed3-400b-433d-9da0-1aa111dce584, “名”: “bąkiKacpraNieŚmierdzą”, “卡路里”:1000, “胖”:400.0, “羰”:20.0, “蛋白质” :40.0,“productKinds”:[“MEAT”],“author”:{“name”:“PlejerAnnłn”,“id”:“testID2”},“media”:{“name”:“heheszki”,“ url“:”http://blabla.pl“,”mediaType“:”IMAGE“},”approved“:false},”weight“:”100“},”approved“:false}; line:1,column:190](通过引用chain:pl.javamill.model.kitchen.Recipe [“recipeElements”])“

有什么不对?

答案

转换器类中的方法总是返回一个值,即使抛出异常(除非它们是RuntimeExceptions),尽管它们可能无法正确编组/解组Product中的RecipeElement。更好的选择是使用getRecipeElement()在类中注释@DynamoDBTypeConvertedJson方法,该方法提供开箱即用的JSON编组/解组。这可能与您在Postman中发送的HTTP请求有关。您应该添加有关getProduct()setProduct()方法和实际邮递员请求的更多信息(没有任何敏感信息)。

以上是关于AWS DynamoDB - 转换器类 - “错误请求,无法解析JSON”的主要内容,如果未能解决你的问题,请参考以下文章

类 java.lang.String 在 DynamoDB 创建表时无法转换为 Long

AWS:从 dynamodb 到 redshift 的数据转换 [关闭]

AWS DynamoDB 之间的查询错误

您如何将 DynamoDB Map/List 类型转换为通过 AWS Pipeline 到 Redshift?

AWS Amplify + Graphql + Dynamodb:突变时出现 ConditionalCheckFailedException 错误

无服务器调用错误:“无权执行:dynamodb:BatchWriteItem on resource:arn:aws:...”