使用 Jackson 自动 JSON 反序列化
Automatic JSON deserialization with Jackson
我是 Jackson 的新手,我有一个 Web 服务需要通过 HTTP POST 请求传递 JSON 对象。 JSON 对象将映射到 Java class 以供进一步处理。
所以我有这个:
@Path("/")
public class RestService {
@POST
@Consumes("application/json")
public String postAction(MyClass json) {
// ...
}
}
MyClass 看起来像这样:
public class MyClass {
protected String var1;
protected JSONArray var2;
}
要点是,var2 是一个数组,包含 JSON 个对象(或为空)。这些 JSON 对象应该映射到另一个 class MySubClass,比如说
public class MySubClass {
protected String subvar1;
}
所以我们会有一个匹配的字符串通过 POST 进入,类似于一个有效的 JSON 对象:
{"var1": "x", "var2": [{"subvar1": "1"},{"subvar1": "2"}]}
问题是,这每次都会崩溃并显示如下错误消息:
string(419) "HTTP/1.1 400 Bad Request Date: Mon, 26 Oct 2015 15:53:26
GMT Content-Type: text/html Connection: close Server:
Jetty(9.2.2.v20140723) org.codehaus.jackson.map.JsonMappingException:
Can not deserialize instance of org.json.JSONArray out of START_ARRAY
token at [Source: HttpInputOverHTTP@2d6e16c7; line: 1, column: 1545]
(through reference chain: x.y.z.MyClass["var2"])"
也许我现在太累了,没法发现错误...
我认为您需要一个 MySubClass 或 JsonArray 的列表。
因为在字符串中你有:
"var2": [{"subvar1": "1"},{"subvar1": "2"}]}
这是一个集合。
所以在你的 MyClass 中你应该有:
public class MyClass {
protected String var1;
protected List<.....> var2;
}
希望对您有所帮助!!
我是 Jackson 的新手,我有一个 Web 服务需要通过 HTTP POST 请求传递 JSON 对象。 JSON 对象将映射到 Java class 以供进一步处理。
所以我有这个:
@Path("/")
public class RestService {
@POST
@Consumes("application/json")
public String postAction(MyClass json) {
// ...
}
}
MyClass 看起来像这样:
public class MyClass {
protected String var1;
protected JSONArray var2;
}
要点是,var2 是一个数组,包含 JSON 个对象(或为空)。这些 JSON 对象应该映射到另一个 class MySubClass,比如说
public class MySubClass {
protected String subvar1;
}
所以我们会有一个匹配的字符串通过 POST 进入,类似于一个有效的 JSON 对象:
{"var1": "x", "var2": [{"subvar1": "1"},{"subvar1": "2"}]}
问题是,这每次都会崩溃并显示如下错误消息:
string(419) "HTTP/1.1 400 Bad Request Date: Mon, 26 Oct 2015 15:53:26 GMT Content-Type: text/html Connection: close Server: Jetty(9.2.2.v20140723) org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of org.json.JSONArray out of START_ARRAY token at [Source: HttpInputOverHTTP@2d6e16c7; line: 1, column: 1545] (through reference chain: x.y.z.MyClass["var2"])"
也许我现在太累了,没法发现错误...
我认为您需要一个 MySubClass 或 JsonArray 的列表。 因为在字符串中你有:
"var2": [{"subvar1": "1"},{"subvar1": "2"}]}
这是一个集合。 所以在你的 MyClass 中你应该有:
public class MyClass {
protected String var1;
protected List<.....> var2;
}
希望对您有所帮助!!