【发布时间】:2018-09-26 18:32:34
【问题描述】:
我有一个简单的服务器从 mongodb 读取所有日志,但是 db 中的某些数据的结果属性具有不同的格式。
其中一个结果属性的值类似于哈希图:
{
"event_name" : "Transfer",
"result" : { "_from" : "0x928c9af0651632157ef27a2cf17ca72c575a4d21",
"_value" : "1111",
"_to" :"0x143449e55cdd2a5bae081f041650ba9089812a95" },
"transaction_id":"c2c986a96a0cfa7fc96619733449fd88c9d685bf704a50d07baef74f6
}
那么对于 result 属性,它会为我返回一个空结果, 但是如果结果属性是这样的,就像一个数组:
"result" : ["0x928c9af0651632157ef27a2cf17ca72c575a4d21", "1111", "0x143449e55cdd2a5bae081f041650ba9089812a95"],
然后它会输出结果值。 问题是它在 mongodb 中同时具有两种格式,有什么方法可以同时处理这两种不同格式的结果属性?
import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document(collection = "eventLog")
public class EventLogEntity implements Serializable {
private static final long serialVersionUID = -70777625567836430L;
@Id
private String id;
@Field(value = "block_number")
@JsonProperty(value = "block_number")
private long blockNumber;
@Field(value = "block_timestamp")
@JsonProperty(value = "block_timestamp")
private long blockTimestamp;
@Field(value = "contract_address")
@JsonProperty(value = "contract_address")
private String contractAddress;
@Field(value = "event_name")
@JsonProperty(value = "event_name")
private String entryName;
@Field(value = "result")
@JsonProperty(value = "result")
private JSONArray resultJsonArray;
@Field(value = "transaction_id")
@JsonProperty(value = "transaction_id")
private String transactionId;
public EventLogEntity(long blockNumber, long blockTimestamp, String contractAddress,
String entryName, JSONArray resultJsonArray, String transactionId) {
this.blockNumber = blockNumber;
this.blockTimestamp = blockTimestamp;
this.contractAddress = contractAddress;
this.entryName = entryName;
this.resultJsonArray = resultJsonArray;
this.transactionId = transactionId;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public long getBlockNumber() {
return blockNumber;
}
public void setBlockNumber(long blockNumber) {
this.blockNumber = blockNumber;
}
public long getBlockTimestamp() {
return blockTimestamp;
}
public void setBlockTimestamp(long blockTimestamp) {
this.blockTimestamp = blockTimestamp;
}
public String getContractAddress() {
return contractAddress;
}
public void setContractAddress(String contractAddress) {
this.contractAddress = contractAddress;
}
public String getEntryName() {
return entryName;
}
public void setEntryName(String entryName) {
this.entryName = entryName;
}
public JSONArray getResultJsonArray() {
System.out.println(resultJsonArray.toString());
return resultJsonArray;
}
public void setResultJsonArray(JSONArray resultJsonArray) {
this.resultJsonArray = resultJsonArray;
}
public String getTransactionId() {
return transactionId;
}
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
}
【问题讨论】:
标签: java mongodb spring-boot