3
目前我有一個Spring REST服務,它能夠生成JSON和XML,但XML響應並不完全在我所需要的範圍內。在Spring REST中自定義Jackson XML響應
這就是我建立至今:
的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>
的POM
<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;
}
結果我當我執行這個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>
這已經很接近了,但我想用項目和項目替換List和Item標籤。
到目前爲止,我已經嘗試添加各種註釋像
- @JacksonXmlElementWrapper(useWrapping = FALSE)
- @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
有人建議我去看看這個指南:
但尚未成功進行此項工作。