我已经创建了一个泛型方法,它是复杂类的转换器类,第二个是枚举类。我有复杂的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;
}
问题是当我尝试测试CRUD方法时..我有addProduct方法,这个工作正常,我创建了addRecipe方法,它看起来几乎一样,但是这里我在Postman中发帖时遇到问题我收到了一个错误: “错误的请求,无法解析JSON”。
来自日志文件的信息:
“无法在[来源:{”id“:null,”name“:”test“,”labels“:[”GLUTEN_FREE“],”author“中的START_OBJECT标记中反序列化java.util.ArrayList的实例) :{“name”:“PlejerAnnł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“],”作者“:{”名称“:”PlejerAnnłn“,”id“:”testID2“},”媒体“:{”名称“:” heheszki”, “URL”: “http://blabla.pl”, “mediaType的”: “IMAGE”}, “批准”:假}, “重量”: “100”}, “批准”:假}; line:1,column:190](通过引用链:pl.javamill.model.kitchen.Recipe [“recipeElements”])“
有什么不对?
答案 0 :(得分:0)
转换器类中的方法总是返回一个值,即使抛出异常(除非它们是RuntimeExceptions),尽管它们可能无法正确地编组/解组Product
中的RecipeElement
。更好的选择是使用@DynamoDBTypeConvertedJson
在类中注释getRecipeElement()
方法,该方法提供开箱即用的JSON编组/解组。这可能与您在Postman中发送的HTTP请求有关。您应该添加有关getProduct()
,setProduct()
方法和实际邮递员请求的更多信息(不包含任何敏感信息)。