Как создать JSON с именованным массивом и безымянными объектами в JAX-RS?

1

Я разрабатываю веб-службы RESTful с помощью JAX-RS в JBoss EAP 6.1 (Resteasy 2.3.6.Final). Ответ моего веб-сервиса должен быть JSON в следующем формате:

{"arrayName": [
   {
    "field1": "value1"
    "field2", "value2"
    "field3", "value3"
   },

   {
    "field1", "Value4"
    "field2", "value5"
    "field3", "value6"
   }
 ]
}

Тем не менее, оба провайдера Jackson и Jettison конвертируют мой список объектов следующим образом:

[
  {"myObjectName":
    {
      "field1":"value1",     
      "field2":"value2",     
      "field3":"value3",     
    }
  },

  {"myObjectName":
    {
      "field1":"value4",     
      "field2":"value5",     
      "field3":"value6",     
    }
  },    
]

Я хочу, чтобы в моем массиве было имя, а элементы в этом массиве НЕ имеют имя.

Мне удалось получить ожидаемый результат с помощью карты и массива, но это кажется ужасным решением.

Может ли кто-нибудь сказать мне, как я могу получить этот результат более элегантным способом, используя лучшие функции JAX-RS/Resteasy?

Код выглядит примерно так:

@GET
@Path("/myPath")
@Produces(MediaType.APPLICATION_JSON)
public MyObject[] myPathJson() {
  MyObject[] myObjectArray = new MyObject[3];
  myObjectArray[0]=new MyObject();
  myObjectArray[1]=new MyObject();
  myObjectArray[2]=new MyObject();

  return myObjectArray;
}
  • 0
    Первый список не действителен JSON. Вы уверены, что это то, как вы хотите, чтобы он отображался?
  • 0
    Попробуйте обернуть его в объект. Кстати это действительно JSON. Если это не работает, вы можете попробовать genson lib.
Показать ещё 1 комментарий
Теги:
jax-rs
resteasy

1 ответ

0

Для решения моей проблемы я обновляю версию Resteasy от версии 2.3.6.Final до версии 3.0.9.Final. В официальной документации объясняется, как это сделать:

3.2. Модернизация рестайлинга в рамках JBoss EAP 6.1

Resteasy поставляется вместе с JBoss EAP 6.1. Вероятно, вам понадобится обновить Resteasy в JBoss EAP 6.1. В дистрибутив Resteasy входит zip файл под названием resteasy-jboss-modules-3.0.9.Final.zip. Разархивируйте этот файл вместе с каталогом модулей /system/layers/base/JBoss EAP 6.1. Это перезапишет некоторые из существующих файлов.

После обновления объекты теперь не называются, вывод - это просто {field1: "value1"}.

Чтобы назвать массив, тогда используется карта it: map.put("arrayName" arrayObjects).

@GET
@Path("/myPath")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, MyObject[]> myPathJson() {
   MyObject[] myObjectArray = new MyObject[3];
   myObjectArray[0]=new MyObject();
   myObjectArray[1]=new MyObject();
   myObjectArray[2]=new MyObject();

    Map<String, MyObject[]> namedArray = new HashMap<String, MyObject[]>();
    namedArray.put("myArrayName", myObjectArray);

    return namedArray;
}

Таким образом, ответ JSON генерируется так, как я хочу:

{"myArrayName": [
  {
"field1": "value1"
"field2", "value2"
  },
  {
"field1", "Value4"
"field2", "value5"
  }
 ]
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню