我正在构建一个RESTful API,我有一个用例,我需要能够呈现两个不同的数据视图.我们可以在内部使用的一个,以及我们将在外部公开的一个.此外,我的API需要同时支持
XML和
JSON.
对于我的JSON响应,这对Jackson非常容易.我可以通过使用JsonViews:http://wiki.fasterxml.com/JacksonJsonViews的功能有条件地在我的JSON响应中包含字段
首先,您需要创建一个指定视图的简单类:
public class Views {
public static class External {}
public static class Internal extends External {}
}
现在使用我的视图类,我只是注释我的字段,它们属于哪个视图,如下所示:
@JsonView(Views.External.class)
private String external = "External";
@JsonView(Views.Internal.class)
private String internal = "Internal";
然后,您可以序列化对象并指定要使用的视图:
ObjectMapper jsonMapper = new ObjectMapper();
ObjectWriter externalWriter = jsonMapper.writerWithView(Views.External.class);
String externalJson = externalWriter.writeValueAsString(new ResponseObject());
这适用于JSON,但不幸的是,目前不支持XML.我如何用XML实现相同的目标?如果有必要,我愿意使用JAXB进行XML转换.
最佳答案 我能够通过添加一个新库来覆盖默认值来实现这个目的:
<!-- Used to Convert our objects to JSON and XML -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>aalto-xml</artifactId>
<version>0.9.8</version>
</dependency>
所以现在我可以使用Jackson及其@JsonView功能序列化为JSON和XML.很干净!我添加的是aalto-xml.