4

私は RESTful API を構築しており、データの 2 つの異なるビューをレンダリングできるようにする必要があるユース ケースがあります。内部で使用できるものと、外部に公開するものです。さらに、私の 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) は、外部マッピング ファイルを提供します。このマッピング ファイルは、注釈を介して提供されるメタデータを拡張または完全に置き換えることができます。以下は、同じオブジェクト モデルが 2 つの異なる気象サービス (Google と Yahoo) にマップされている例です。

MOXy は、XML と JSON の両方のバインドもサポートしています。

MOXy は、JAX-RS 実装とも簡単に統合できます。

于 2012-10-17T19:38:28.370 に答える