使用Jackson

时间:2015-10-26 15:57:45

标签: json jackson maven-jetty-plugin

我是杰克逊的新手,我有一个Web服务,希望通过HTTP POST请求传递JSON对象。 JSON对象将映射到Java类以进行进一步处理。

所以我有这个:

@Path("/")
public class RestService {
    @POST
    @Consumes("application/json")
    public String postAction(MyClass json) {
        // ...
    }
}

MyClass看起来像这样:

public class MyClass {
    protected String var1;
    protected JSONArray var2;
}

点是,var2是一个数组,持有JSONObjects(或为空)。这些JSON对象应该映射到另一个类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内容类型:text / html连接:关闭服务器:   Jetty(9.2.2.v20140723)org.codehaus.jackson.map.JsonMappingException:   无法从START_ARRAY反序列化org.json.JSONArray的实例   令牌在[来源:HttpInputOverHTTP @ 2d6e16c7; line:1,专栏:1545]   (通过参考链:x.y.z.MyClass [“var2”])“

也许我现在太累了发现错误......

1 个答案:

答案 0 :(得分:1)

我认为您需要一个MySubClass或JsonArray列表。 因为在字符串中你有:

"var2": [{"subvar1": "1"},{"subvar1": "2"}]} 

这是一个集合。 所以在你的MyClass中你应该有:

 public class MyClass {

    protected String var1;
    protected List<.....> var2;
 }

我希望这会有所帮助!!