Tidak ada konten untuk dipetakan ke Objek karena akhir input saat Memanggil WS REST

Pertimbangkan metode berikut:

@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();
    }
}

Ketika saya memanggil WS dari Tukang Pos, saya mendapatkan pengecualian berikut:

Mungkin penting untuk menyebutkan bahwa pengecualian tersebut hilang ketika saya menghapus parameter jsonObject dan mengedit metode seperti ini:

Setiap saran akan sangat dihargai.

@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();
}

Berkat tautan yang diposting oleh Arnaud, saya mengetahui bahwa Anda hanya dapat memiliki satu parameter tanpa anotasi, dan parameter tersebut akan diproses sebagai badan permintaan. Jadi saya membuat perubahan yang diperlukan, dan inilah tampilan metodenya sekarang:


person Jesse James    schedule 08.02.2019    source sumber
comment
Terima kasih atas jawaban Anda. Namun, saya tidak menggunakan pegas di sini. Apakah ada alternatif untuk anotasi itu?   -  person Arnaud    schedule 08.02.2019
comment
Rupanya, Satu-satunya parameter tanpa anotasi adalah wadah untuk badan permintaan, lihat di sini stackoverflow.com/questions/41157949/ . Anda tidak dapat meneruskan beberapa objek dengan cara ini, hanya ada satu isi permintaan.   -  person Jesse James    schedule 08.02.2019
comment
Tautan yang Anda posting memberi saya petunjuk untuk menyelesaikan masalah. Terima kasih   -  person Arnaud    schedule 08.02.2019
comment
08-Feb-2019 14:23:44.138 GRAVE [http-nio-8080-exec-7] com.sun.jersey.spi.container.ContainerResponse.mapMappableContainerException Pengecualian yang terkandung dalam MappableContainerException tidak dapat dipetakan ke respons, ulang melempar ke wadah HTTP java.io.EOFException: Tidak ada konten untuk dipetakan ke Objek karena akhir input di org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2766) di org.codehaus.jackson.map. ObjectMapper._readValue(ObjectMapper.java:2682) di org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308) di org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419) di com .sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139) di com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:490) di com.sun.jersey .server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123) di com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:86) di com.sun .jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153) di com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractRe sourceMethodDispatchProvider. java:183) di com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) di com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept( HttpMethodRule.java:302) di com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) di com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept( ResourceClassRule.java:108) di com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) di com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept( RootResourceClassesRule.java:84) di com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) di com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java: 1473) di com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) di com.sun.jersey.server.impl.application. WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) di com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) di com.sun.jersey.spi.container.servlet.ServletContainer.service( ServletContainer.java:558) di com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733) di javax.servlet.http.HttpServlet.service(HttpServlet.java:742) di org.apache .catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) di org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) di org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter .java:52) di org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) di org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) di org.apache.catalina. intinya di org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) di org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) di org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java:650) di org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) di org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) di org.apache. coyote.http11.Http11Processor.service(Http11Processor.java:803) di org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) di org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) di org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468) di org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) di java.util.concurrent .ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) di java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) di org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java :61) di java.lang.Thread.run(Thread.java:748)   -  person Jesse James    schedule 08.02.2019


Jawaban (1)


Saya harap ini akan membantu orang lain dengan masalah yang sama suatu hari nanti.

@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();
    }
}

Coba tambahkan anotasi

@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();
    }
}
: _2_ .

person Jesse James    schedule 08.02.2019