0

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

org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“validTo”(类 org.codehaus.jettison.json.JSONObject),未标记为可忽略| 在 [来源:org.eclipse.jetty.server.HttpConnection$Input@1cafa346; 行: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);
          }
        });

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

任何人都可以帮助我吗?

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

此致。

4

1 回答 1

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
}
于 2013-08-15T15:43:02.053 回答