我使用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);
}
});
我长时间搜索这个例外但是找不到任何帮助。我也尝试了不同的方法,但无法解决这个问题。
任何人都可以帮助我?
如果您需要更多信息,请告诉我们!
最好的问候。答案 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
}