2013-07-13 56 views
0

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

org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别字段“validTo”(Class org.codehaus.jettison.json.JSONObject),未标记为可忽略|在[Source:[email protected];行:1,柱: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); 
      } 
     }); 

我搜索了这个异常很长一段时间,但无法找到任何帮助。我也尝试了不同的方法,但无法解决这个问题。

任何人都可以帮到我吗?

如果您需要更多信息,请让我知道!

此致敬意。

+0

你见过这个http://stackoverflow.com/questions/4486787/jackson -with-JSON-无法识别,现场没有标记 - 如忽视的? – Algorithmist

+0

谢谢你的回复。我已经看到了这个问题,但它并没有解决我的问题。我不喜欢为我在服务器上接收到的JSON编写“包装类”,而是使用一些通用数据类型(如JSONObject)来接收不依赖任何映射的任意JSON对象。 – maxseam

回答

0

泽西不会自动解开JSON字符串到JSONObject的自身,但你可以很容易地做到如下:

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

    // do things with object 
} 
+0

好的,谢谢,我会尽力的!我认为泽西也许可以自动做到这一点。 您对此有何看法?将String与JSONObject结合使用以将任意的JSON数据传输到服务器还是DTO是在这种情况下走的路? – maxseam

+0

如果你有它们,使用DTO,当处理在运行时定义的结构时,你可能没有它们,所以这种方法可能比将所有东西封装在一个通用的carry-everything DTO – cyberz