“没有内容映射到对象,由于输入的结束”调用REST WS时

问题描述 投票:0回答:1

请看下面的方法:

@POST
@Path("/device")
@Consumes("application/json")
@Produces("application/json")
public String putDevice(String jsonObject, @Context HttpHeaders headers, Admin admin)
{
    ObjectMapper mapper = new ObjectMapper();

    try
    {
        return updateDevice(mapper.readTree(jsonObject), Utils.extractUserInfo(headers), admin.getServer(), admin.getPort());
    }
    catch (JsonProcessingException e)
    {
        return e.getMessage();
    }
    catch (IOException e)
    {
        return e.getMessage();
    }
}

当我打电话从邮差的WS,我得到以下异常:

08-FEB-2019 14:23:44.138 GRAVE [HTTP-NIO-8080-EXEC-7] com.sun.jersey.spi.container.ContainerResponse.mapMappableContainerException所含内MappableContainerException异常不能被映射到的响应,重新投掷到HTTP容器java.io.EOFException的:没有内容映射到对象由于在org.codehaus.jackson.map在org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2766)输入端。 ObjectMapper._readValue(ObjectMapper.java:2682)在org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308)在org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)在COM .sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139)在com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:490)在com.sun.jersey .server.impl.model.method.dispatch.EntityParamDispatchProvider $ EntityInjectable.getValue(EntityParamDispatchProvider.java:123)在com.sun.jerse y.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:86)在com.sun.jersey.server.impl.model.method.dispatch.Abs​​tractResourceMethodDispatchProvider $ EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)在COM。 sun.jersey.server.impl.model.method.dispatch.Abs​​tractResourceMethodDispatchProvider $ TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183)在com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java :75)在com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)在com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java :147)在com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)在com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java :147)在com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept (RootResourceClassesRule.java:84)在com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)在com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java :1473)在com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)在com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)在com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)在com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)在的com.sun。 jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)在javax.servlet.http.HttpServlet.service(HttpServlet.java:742)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain。的java:231)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)在org.apache.tomc at.websocket.server.WsFilter.doFilter(WsFilter.java:52)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain。的java:166)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)在org.apache.catalina.authenticator .AuthenticatorBase.invoke(AuthenticatorBase.java:496)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)在org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)在org.apache.catalina.connector.CoyoteAdapter.service( CoyoteAdapter.java:342)在org.apache.coyote.http11.Http11Processor.service(Http11Processor.ja VA:803)在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)在org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:790)在org.apache.tomcat.util.net .NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1468)在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149 )在java.util.concurrent.ThreadPoolExecutor中$ Worker.run(ThreadPoolExecutor.java:624)在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread中。运行(Thread.java:748)

需要提及的是,当我删除了参数jsonObject和编辑这样的方法异常消失的可能很重要:

@POST
@Path("/device")
@Consumes("application/json")
@Produces("application/json")
public Response putDevice(@Context HttpHeaders headers, Admin admin)
{
    String output = admin.toString();
    return Response.status(200).entity(output).build();
}

任何建议将不胜感激。

java json rest web-services jersey
1个回答
1
投票

由于发表阿尔诺的联系,我了解到,你只能有没有标注一个参数,以及一个将被处理为请求主体。所以我做了必要的修改,并且这里的方法现在的样子:

@POST
@Path("/device")
@Consumes("application/json")
@Produces("application/json")
public String putDevice(String jsonString, @Context HttpHeaders headers)
{
    ObjectMapper mapper = new ObjectMapper();
    try
    {
    JSONObject jsonObject = new JSONObject(jsonString);
    return updateDevice(mapper.readTree(jsonString),
                        Utils.extractUserInfo(headers),
                        jsonObject.getString("server"),
                        jsonObject.getInt("port"));
}
    catch (JSONException e)
    {
        return e.getMessage();
    }
    catch (JsonProcessingException e)
    {
        return e.getMessage();
    }
    catch (IOException e)
    {
        return e.getMessage();
    }
}

我希望这会帮助别人同样的问题一天。

© www.soinside.com 2019 - 2024. All rights reserved.