[英]Convert NaN value into null when parsing json using jackson library
[英]Object value as null in Jackson Parsing
我正在使用Jackson庫並嘗試實現此處提到的
BaseOperationRequest.java
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "command"
)
@JsonSubTypes({
@JsonSubTypes.Type(name = "ZADD", value = ZAddBaseOperationRequest.class)
})
public class BaseOperationRequest {
public short operationId;
public Command command;
public String gameId;
public String key;
}
ZAddBaseOperationRequest.java
public class ZAddBaseOperationRequest extends BaseOperationRequest{
public Map<String, Double> members;
}
Command.java
public enum Command{
ZADD,
HSET
}
問題出在這里,當我嘗試通過REST調用傳遞對象時,就像這樣:
@RestController
public class MyController{
//keeping just for now as GET, will change it to POST and take it in RequesBody later on
@RequestMapping(value = "/process/{object}", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody ResponseEntity process(@Pathvariable String object){
System.out.println(object);//I am getting this as correct--->(A)
BaseOperationRequest[] baseOperationRequestArray = new ObjectMapper().readValue(object, BaseOperationRequest[].class);//getting exception --->(B)
System.out.println(baseOperationRequestArray);
}
}
現在,我將其稱為:
第一種情況在 沒有成員映射的 情況 下撥打電話:
<server>:<port>/.../process/[{"operationId":1,"command":"ZADD","gameId":"t5","key":"abc"}]
該處理的方法獲取調用和自傑克遜被告知獲得ZADD的命令,它在做的時候它來創建ZAddBaseOperationRequest的對象,但命令本身的價值在結果對象指定為空 。
請解釋為什么? 命令的價值何去何從?
第二種情況, 使用成員映射進行呼叫 ::/.../ process / [{“ members :: {” a“:1.0},” operationId“:1,” command“:” ZADD“,” gameId“:” t5“ , “關鍵”: “ABC”}]
那么在這種情況下,等式(A)顯示[{“ members”:{“ a”:1.0,b就是這樣,GET的其他部分在哪里去了。
這讓我發瘋。 :)。 提前致謝..
請幫忙。
將json作為路徑參數發送不是一個好習慣。
要解決您的問題,請在JsonTypeInfo
批注中添加visible=true
。 您的聲明將變為:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "command",
visible = true
)
根據visible
傑克遜文檔:
定義類型標識符值將作為JSON流的一部分傳遞到反序列化器(true),還是由TypeDeserializer處理和刪除的屬性(false)。 默認值為false,這意味着Jackson將處理並從傳遞給JsonDeserializer的JSON內容中刪除類型標識符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.