簡體   English   中英

對象值在Jackson解析中為null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM