Я разрабатываю веб-службы 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;
}
Для решения моей проблемы я обновляю версию 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"
}
]
}