com.fasterxml.jackson.databind.JsonMappingException (через цепочку ссылок: java.util.ArrayList[0])

Развертываем службу отдыха на wildfly. Вызов службы отдыха, как показано ниже, является успешным.

Entity<List<Product>> entity = Entity.entity(productList,MediaType.APPLICATION_JSON);
Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.method("POST", entity);

Определение сервиса отдыха

@Path("/streams/productList")
public class ProductListService extends ServiceBase {

  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  public Response sendProducts(@Valid List<Product> pdts) throws IOException, URISyntaxException {
    // more customization needed
    return sendResponse(200, CommonUtils.getIds(pdts), new ArrayList<String>());
  }
}

Новое требование состоит в том, чтобы отправить полезную нагрузку json в службу остальных, которая преобразуется в список продуктов. Ниже не работает! Это каждый продукт строки полезной нагрузки JSON, добавленной в список.

List<String> productsAsJsonPayload = retrievePayloadFromSomewhere();
Entity<List<String>> entity = Entity.entity(productsAsJsonPayload,MediaType.APPLICATION_JSON);
Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.method("POST", entity);

Это дает ошибку:

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.abc.enterprise.devsvc.model.Product] from String value ('{"id":"00000001-0001-0001-0001-000000000001","type":"Some Product","serial":"MR-1234567","messageTimestamp":1484110968720,....}'); no single-String constructor/factory method
 at [Source: io.undertow.servlet.spec.ServletInputStreamImpl@207f12a8; line: 1, column: 2] (through reference chain: java.util.ArrayList[0])

Мне пришлось внести эти изменения, чтобы заставить его работать: (по существу, добавить [])

  StringBuilder jsonPayloadAsArray = new StringBuilder("[");
  for (int idx = 0; idx < productsAsJsonPayload.size(); idx++) {
    jsonPayloadAsArray.append(productsAsJsonPayload.get(idx));
    if (idx < productsAsJsonPayload.size()-1) {
      jsonPayloadAsArray.append(",");
    }
  }
  jsonPayloadAsArray.append("]");

Entity<String> entity = Entity.entity(jsonPayloadAsArray.toString(),MediaType.APPLICATION_JSON);
Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.method(httpMethod, entity);

Но это взломать. Есть ли способ обойти это взломать?

0 ответов

Другие вопросы по тегам