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 的数据转换 [关闭]
您如何将 DynamoDB Map/List 类型转换为通过 AWS Pipeline 到 Redshift?
AWS Amplify + Graphql + Dynamodb:突变时出现 ConditionalCheckFailedException 错误
无服务器调用错误:“无权执行:dynamodb:BatchWriteItem on resource:arn:aws:...”