我正在尝试将来自我的Android客户端的对象发布到我的Play Framework Java REST API以持久保存到数据库。
我使用Retrofit执行API调用,使用Realm进行本地设备存储。使用客户端设备中的Gson库来处理JSON。
我有一个自定义类在发送之前将我的对象转换为JSON,因为如果我不这样做,任何子对象都将包含额外的信息,例如 columnInfo ,这些信息将无法在服务器,它将无法将对象转换为合法的实体。
服务器堆栈跟踪消息
引起: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 无法识别的字段“columnInfo”(类models.UserTbl),未标记为 可忽略的(5个已知属性:“dateCreated”,“id”,“name”,“email”, “dateUpdated”])
自定义序列化类
public class UserBookSerializer implements JsonSerializer<UserBook> {
@Override
public JsonElement serialize(UserMovie src, Type typeOfSrc, JsonSerializationContext context) {
final JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", src.getId());
jsonObject.addProperty("bookId", src.getBookId());
jsonObject.addProperty("user", String.valueOf(context.serialize(src.getUser()))); // here is the issue
jsonObject.addProperty("isSaved", src.isSaved());
return jsonObject;
}
}
以上是我的尝试,但是没有成功。有人知道如何解决这个问题吗?
答案 0 :(得分:0)
你可以用gson轻松地序列化类,让我们说你想要在服务器上获得的Json
{
"name":"never",
"age":5,
"data":{
"id":"2fds4",
"locale":"us"
}
}
您编写以下结构
class User {
String name;
long age;
Data data;
}
class Data {
String id;
String locale;
}
然后您只需将User
的实例传递给您的改造版,它就会将其序列化。
答案 1 :(得分:0)
您可以编辑UserMovie类并使用Gson的@Expose
注释来明确标记要发送的属性。创建Retrofit实例时,它应与GsonBuilder.excludeFieldsWithoutExposeAnnotation()
一起使用。