4

我正在构建一个 RESTful API,并且我有一个用例,我需要能够呈现我的数据的两个不同视图。一种我们可以在内部使用,一种我们将在外部公开。此外,我的 API 需要同时支持 XML 和 JSON。

对于我的 JSON 响应,这对 Jackson 来说非常容易。我可以通过使用 JsonViews 的功能有条件地在我的 JSON 响应中包含字段:http ://wiki.fasterxml.com/JacksonJsonViews

首先,您需要创建一个简单的类来指定您的视图:

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 达到同样的效果?如果需要进行 XML 转换,我愿意使用 JAXB。

4

2 回答 2

2

我能够通过添加一个新库来覆盖默认值来实现这一点:

        <!-- 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。

于 2012-10-18T14:16:39.617 回答
0

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。

EclipseLink JAXB (MOXy) 提供了一个外部映射文件。此映射文件可以增加或完全替换通过注释提供的元数据。下面是一个示例,其中相同的对象模型映射到两个不同的天气服务(Google 和 Yahoo)

MOXy 还支持 XML 和 JSON 绑定:

MOXy 还可以轻松地与 JAX-RS 实现集成:

于 2012-10-17T19:38:28.370 回答