【发布时间】:2015-04-29 11:58:25
【问题描述】:
我正在使用 Jackson 库并尝试实现 here 中提到的目标
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"}]
process 方法被调用,因为 Jackson 被告知在获得 ZADD 命令时创建 ZAddBaseOperationRequest 的对象,所以它正在执行它,但 command 本身的值在结果对象中被分配为 null。
请解释为什么? command的价值去哪儿了?
第二种情况 与会员地图通话: :/.../process/[{"members":{"a":1.0},"operationId":1,"command":"ZADD","gameId":"t5","key":"abc "}]
那么在这种情况下,等式 (A) 显示 [{"members":{"a":1.0,b 就是这样,GET 的另一部分去了哪里。
这让我很生气。 :)。 提前谢谢..
请帮忙。
【问题讨论】:
标签: java json spring rest jackson