現在、私はJSONとXMLを生成できるSpring RESTサービスを持っていますが、私が探しているものではないXMLレスポンスを生成しています。Spring RESTでジャクソン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;
}
結果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>
ですが、私はプロジェクトとプロジェクトとリストとアイテムのタグを交換したいと思います。
これまでのところ、私は
- @JacksonXmlElementWrapper(useWrapping = false)を
- @JsonTypeInfoのようなさまざまな注釈を追加しようとしました(使用= JsonTypeInfo.Id.NAME、= JsonTypeInfo.As.WRAPPER_OBJECT含めます)
- @JacksonXmlElementWrapper(useWrapping = trueの場合、ローカル名は= "プロジェクト")
- @JacksonXmlProperty(ローカル名= "プロジェクト")
- @JacksonXmlRootElement(ローカル名= "プロジェクト")
最初の4私は自分のコントローラーメソッドで使用したものと、生成されたオブジェクト(ProjectとProjectBaseの両方)で最後に使用したものは何も起こりません。
私は間違っていますか、これを達成するのを忘れましたか?
それはしかし
[
{
"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"
}]
}
}
であるように私は私のJSON出力を維持したいと思います編集は#1
誰かがこのガイドを見てみるために私を示唆しました。
しかし、この作業には成功していません。