泽西+杰克逊+任意json

时间:2013-07-13 14:20:11

标签: json rest jersey jackson

我使用Jersey + Jackson + Guice作为我的webapp。现在我想为我的客户端实现一个简单的REST调用,我在服务器上接收任意JSON数据,但每次我得到以下异常:

  

org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“validTo”(类org.codehaus.jettison.json.JSONObject),未标记为可忽略|在[来源:org.eclipse.jetty.server.HttpConnection$Input@1cafa346; line:1,column:25](通过引用链:org.codehaus.jettison.json.JSONObject [“validTo”])

我的方法签名如下所示:

@Override
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void post(JSONObject json) throws JSONException {

}

我的Guice配置:

return Guice.createInjector(new TTShiroModule(this.servletContext),  ShiroWebModule.guiceFilterModule(),
        new ServiceModule(), new JerseyServletModule() {

          @Override
          protected void configureServlets() {
            bind(GuiceContainer.class);

            bind(MessageBodyReader.class).to(JacksonJsonProvider.class);
            bind(MessageBodyWriter.class).to(JacksonJsonProvider.class);

            serve("/rest/*").with(GuiceContainer.class, params);
          }

          @Provides
          @Singleton
          ObjectMapper objectMapper() {
            final ObjectMapper mapper = new ObjectMapper();
            return mapper;
          }

          @Provides
          @Singleton
          JacksonJsonProvider jacksonJsonProvider(ObjectMapper mapper) {
            return new JacksonJsonProvider(mapper);
          }
        });

我长时间搜索这个例外但是找不到任何帮助。我也尝试了不同的方法,但无法解决这个问题。

任何人都可以帮助我?

如果您需要更多信息,请告诉我们!

最好的问候。

1 个答案:

答案 0 :(得分:0)

Jersey不会自动将json字符串解包到JSONObject,但您可以轻松地执行以下操作:

@Override
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void post(String json) throws JSONException {
   JSONObject object = new JSONObject(json);

   // do things with object
}