使用 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;
 }

希望对您有所帮助!!