В настоящее время у меня есть служба REST Spring, которая может генерировать JSON и XML, но ответ XML не совсем то, что я ищу.Настройка ответа Jackson XML в Spring REST
Это то, что я построить до сих пор есть:
объекта XSD
<xs:element name="project">
<xs:complexType>
<xs:complexContent>
<xs:extension base="projectBase"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="projectBase">
<xs:attribute type="xs:string" name="name" use="required" />
<xs:attribute type="xs:string" name="id" use="optional" />
<xs:attribute type="xs:anyURI" name="self" use="optional" />
</xs:complexType>
ПОМ
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
Контроллер
@ApiOperation(value = "GET",
notes = "Returns a list of exisiting projects.")
@RequestMapping(method = RequestMethod.GET, produces = {"application/smartask.projectsV1+xml", "application/smartask.projectsV1+json"})
public List<be.smartask.api.model.smartask.Project> getProjects(@ApiParam(value = "page of found projects", required = false) @RequestParam(value = "page", required = false, defaultValue = "0") int page,
@ApiParam(value = "size(min:5, max:50) of projects on a page", required = false) @RequestParam(value = "size", required = false, defaultValue = "10") int size) throws ServiceException, ConversionException {
String uri = getURLWithContextPath(this.request);
List<be.smartask.api.model.smartask.Project> projects = projectConverter.convertToObjectList(projectService.findAll(page, size), uri);
return projects;
}
Результат I получить, когда я выполню этот g etProjects метод
<List xmlns="">
<item>
<name>project1</name>
<id>7a666889-9b03-4790-8100-d41a9de66a63</id>
<self>http://localhost/ask/projects/7a666889-9b03-4790-8100-d41a9de66a63</self>
</item>
<item>
<name>project2</name>
<id>f784ede1-d019-46e9-b7a4-83c51d6f7d8e</id>
<self>http://localhost/ask/projects/f784ede1-d019-46e9-b7a4-83c51d6f7d8e</self>
</item>
<item>
<name>project3</name>
<id>936e3ed9-b8c6-46ab-9570-60dcfcaaa670</id>
<self>http://localhost/ask/projects/936e3ed9-b8c6-46ab-9570-60dcfcaaa670</self>
</item>
<item>
<name>project4</name>
<id>4eaa6045-bbc4-423d-8bae-1da11692114b</id>
<self>http://localhost/ask/projects/4eaa6045-bbc4-423d-8bae-1da11692114b</self>
</item>
</List>
Что уже довольно близко, но я хотел бы заменить список и Элемент тег с проектами и Project.
До сих пор я пытался добавить различные аннотаций как
- @JacksonXmlElementWrapper (useWrapping = ложь)
- @JsonTypeInfo (использование = JsonTypeInfo.Id.NAME, включают в себя = JsonTypeInfo.As.WRAPPER_OBJECT)
- @JacksonXmlElementWrapper (useWrapping = истинные, LocalName = "проекты")
- @JacksonXmlProperty (LocalName = "проект")
- @JacksonXmlRootElement (LocalName = "проект")
Первые 4, которые я использовал в моем методе контроллера, и последний, который я использовал для сгенерированного объекта (как Project, так и ProjectBase), но ничего не происходит.
Что я делаю неправильно или что я забыл сделать для этого?
Я хотел бы, чтобы мой выход JSON, как это хотя
[
{
"name": "project1",
"id": "7a666889-9b03-4790-8100-d41a9de66a63",
"self": "http://localhost/ask/projects/7a666889-9b03-4790-8100-d41a9de66a63"
}
]
и не
{
"Projects": {
"Project": [{
"name": "project1",
"id": "7a666889-9b03-4790-8100-d41a9de66a63",
"self": "http://localhost/ask/projects/7a666889-9b03-4790-8100-d41a9de66a63"
}]
}
}
Редактировать # 1
Кто-то предложил мне взглянуть на это руководство:
, но не удалось выполнить эту работу.