使用杰克逊解析领域模型
Posted
技术标签:
【中文标题】使用杰克逊解析领域模型【英文标题】:Parse realm model using jackson 【发布时间】:2018-04-20 23:48:53 【问题描述】:使用jackson库将领域模型转换为json对象时获取未知密钥。
这是我的领域模型实例。
public class RecordData extends RealmObject
public RecordData()
private FormData formData;
@Nullable
@JsonProperty("values")
private RealmList<Values> values;
@Nullable
@JsonProperty("value")
private String value;
将领域模型转换为 json 对象的代码。
JSONObject recordDataJsonObject = new JSONObject(new ObjectMapper().writeValueAsString(formData.getRecordData()));
解析 json 的输出:
"loaded":true,"managed":false,"valid":true,"value":"fdfdf","values":[]
领域版本:io.realm:realm-gradle-plugin:4.1.1
Rxjava 版本:'io.reactivex.rxjava2:rxjava:2.1.6'
杰克逊版:com.fasterxml.jackson.core:jackson-databind:2.8.6
为什么我得到加载、托管和有效的布尔值?
【问题讨论】:
可以发getRecordData()
的代码吗?
getRecordData() 方法只返回 RecordData 领域模型实例
你不做任何Realm.where().findAll()
查询吗?我需要查看该代码以验证您是否遇到了我解决的类似问题。
这没有任何意义,这些布尔值是领域对象的内部字段。但它不应该出现在 json 中。
【参考方案1】:
从 ObjectMapper 写响应,你必须这样做:
public static String getJsonFromObject()
ObjectMapper objectMapper = ObjectMapperHelper.getObjectMapperInstance();
String jsonString = null;
try
jsonString = objectMapper.writeValueAsString(formData.getRecordData());
catch (JsonProcessingException e)
e.printStackTrace();
return jsonString != null ? jsonString : "";
并在 JsonObject 中得到您的回复:
try
JSONObject jsonObject = new JSONObject().getJSONObject(getJsonFromObject());
catch (JSONException e)
e.printStackTrace();
编码愉快!!
【讨论】:
我使用了上面相同的方法,但问题存在。【参考方案2】:我已经使用 Gson 解析库解决了。
JSONObject recordDataJsonObject = new JSONObject(new Gson().toJson(formData.getRecordData()));
它不返回未知密钥。输出在这里。
"value":"fdfdf","values":[]
如果您面临同样的情况,希望您能找到此解决方案。
【讨论】:
【参考方案3】:你可以使用@JsonIgnoreProperties
注解:
@JsonIgnoreProperties("loaded", "managed", "valid")
public class RecordData extends RealmObject
public RecordData()
private FormData formData;
@Nullable
@JsonProperty("values")
private RealmList<Values> values;
@Nullable
@JsonProperty("value")
private String value;
另一种选择是使用@RealmClass public class RecordData implements RealmModel
。
【讨论】:
使用 JsonIgnoreProperties 将是击球手选项。但是@RealmClass 注解已经添加到我的类中了。 重点是implements RealmModel
而不是extends RealmObject
,但我认为忽略属性更容易以上是关于使用杰克逊解析领域模型的主要内容,如果未能解决你的问题,请参考以下文章
Java 并发编程解析 | 如何正确理解Java领域中的多线程模型,主要用来解决什么问题?