Я пытаюсь отправить запрос POST в мой API, и он вызывает исключение NULL Pointer для следующего кода. В чем может быть проблема? - PullRequest
0 голосов
/ 24 октября 2019

Вот мой код, который я использовал: *

@POST
@Path("/json-post")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String invoke(InputJson json) {
    try {
        // this must be:
        // {"json" : ..., "jslt" : jslt}

        JsonNode input = mapper.convertValue(json.getJson(), JsonNode.class);

        // now we can do the thing
        JsonNode source = NodeUtils.mapper.readTree(input.get("json").asText());
        String jslt = input.get("jstlTemplateString").asText();

        Expression template = Parser.compileString(jslt);
        JsonNode output = template.apply(source);
        return NodeUtils.mapper.writerWithDefaultPrettyPrinter().writeValueAsString(output);
    } catch (Throwable e) {
        return "ERROR: " + e;
    }
}

Это файл класса, который я использовал ::

public class InputJson {
  Object json;
  String jstlTemplateString;

public Object getJson() {
    return json;
}

public void setJson(Object json) {
    this.json = json;
}

public String getJstlTemplateString() {
    return jstlTemplateString;
}

public void setJstlTemplateString(String jstlTemplateString) {
    this.jstlTemplateString = jstlTemplateString;
}
}

В API яс ответом 200, но выдает исключение NULL Pointer :: Это мой пример полезной нагрузки ::

{ 
 "json" : [{"Key1": "Value1", "Key2": "Value2", "Key3": "Value3"}, 
 {"Key1": "Value1", "Key2": "Value2", "Key3": "Value3"},{"Key1": 
 "Value1", "Key2": "Value2", "Key3": "Value3"}] , 

 "jstlTemplateString":"[for (.){\"Key-Change-1\" : .Key1,\"Key-Change- 
 2\": .\"Key2\",\"Key-Change-3\": .\"Key3\"}]"
}

Как мне внести изменения в мой код, чтобы получить некоторые данные из запроса. Нужна помощь, которая сталкивалась с той же проблемой в течение последних 2 дней.

StackTrace ::

dw-17 - POST /api/jsonpost@4732" prio=5 tid=0x11 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
      at com.app.resources.JsonTransformerResource.JsonTransformerResource.invoke(JsonTransformerResource.java:72)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
      at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
      at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
      at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:205)
      at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
      at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
      at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
      at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
      at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
      at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
      at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
      at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
      at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
      at io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1689)
      at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:34)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
      at io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:50)
      at io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:44)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1174)
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1106)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
      at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:240)
      at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51)
      at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:396)
      at io.dropwizard.jetty.BiDiGzipHandler.handle(BiDiGzipHandler.java:68)
      at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:56)
      at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:169)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
      at org.eclipse.jetty.server.Server.handle(Server.java:524)
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319)
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)
      at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
      at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
      at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
      at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
      at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
      at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
      at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
      at java.lang.Thread.run(Thread.java:748)

1 Ответ

0 голосов
/ 24 октября 2019

Если Object json; принимает список объектов Json, его необходимо объявить как список.

public class InputJson {
  List<ObjectKeyClass> json;
  String jstlTemplateString;
}


public class ObjectKeyClass {
  //class variables as needed....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...