mir*_*kys 6 java json jackson deserialization
我有类似JSON-RPC客户端的东西,我无法将传入的json字符串反序列化为我的java对象.传入的json格式为:
{"value":"xxxx","type":"xxxx"}
Run Code Online (Sandbox Code Playgroud)
我想要反序列化的对象:
@JsonAutoDetect
@JsonDeserialize()
public class ReturnValue {
private Object value;
private String type;
@JsonCreator
public ReturnValue(@JsonProperty("value") String val, @JsonProperty("type") String type) {
value = val;
this.type = type;
}
...getters, setters...
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,如果值是String,但如果它是数组类型,它会抛出JsonMapping异常 - 无法反序列化java.lang.String的实例,因为json的START_ARRAY标记如下:
{\"value\":[8, 10], \"type\":\"[int]\"}
Run Code Online (Sandbox Code Playgroud)
代码是:
int[] arr = (int[])getReturnValue(jsonString).getValue();
Run Code Online (Sandbox Code Playgroud)
其中getReturnValue并不特别:
ObjectMapper om = new ObjectMapper();
ReturnValue rv = null;
rv = om.readValue(json, ReturnValue.class);
return rv;
Run Code Online (Sandbox Code Playgroud)
另一个问题是我希望type属性是Class类型,但这会抛出另一个映射异常.杰克逊有没有办法做到这一点,或者我必须自己从字符串转换为适当的类.谢谢你的任何建议.
将构造函数更改为:
@JsonCreator
public ReturnValue(@JsonProperty("value") Object val, @JsonProperty("type") String type) {
Run Code Online (Sandbox Code Playgroud)
因为,就像错误指出的那样,它不知道如何从数组中生成一个String.但是String和JSON Array都可以转换为Object; 如果是这样,它将是Java String,或Java List(用于JSON数组),或Java Map(用于JSON对象).
| 归档时间: |
|
| 查看次数: |
13266 次 |
| 最近记录: |