【问题标题】:AWS DynamoDB - converter class - "Bad request, unable to parse JSON"AWS DynamoDB - 转换器类 - “错误请求,无法解析 JSON”
【发布时间】:2018-06-02 18:18:16
【问题描述】:

我创建了一个通用方法,它是复杂类的转换器类和枚举的第二个。我有一个复杂的食谱类,所以我使用了@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”。

以及来自日志文件的信息:

“无法从 [Source: {"id":null,"name":"test","labels":["GLUTEN_FREE"],"author" 的 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例:{"name":"Plejer Annołn","id":"testID2"},"media":{"name":"heheszki","url":"http://blabla.pl","mediaType":"IMAGE" },"recipeElements":{"product":{"id":927c3ed3-400b-433d-9da0-1aa111dce584,"name":"bąkiKacpraNieŚmierdzą","calories":1000,"fat":400.0,"carbo": 20.0,"protein":40.0,"productKinds":["MEAT"],"author":{"name":"Plejer Annołn","id":"testID2"},"media":{"name": "heheszki","url":"http://blabla.pl","mediaType":"IMAGE"},"approved":false},"weight":"100"},"approved":false}; 行:1,列:190](通过引用链:pl.javamill.model.kitchen.Recipe["recipeElements"])"

有什么问题?

【问题讨论】:

    标签: java json string amazon-web-services amazon-dynamodb


    【解决方案1】:

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

    【讨论】:

    • 我改变了一些东西,现在在日志文件中我有这个信息:“com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token” in recipeElement
    • @D.Zet 我怀疑这一定是一些旧数据。使用这个对象的类的内容是什么?
    • 嘿,我编辑了我的问题,请查看更多详细信息
    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多