4

Java オブジェクトを JSON オブジェクトとして返すために RESTEasy を使用しています (これは JSON マーシェリングに Jettison Mapped Convention を使用しています)。

しかし、ルートノードを返したくありません。

例えば

@XmlRootElement
public class Car{
    private Integer id;
    private String name;
}

このクラスのオブジェクトは JSON になります。

{"Car":{"id":6,"name":"someName"}}

実際に来ているので、

<Car>
    <id>6</id>
    <name>someName</name>
</Car>

しかし、ルートノードは必要ありません。ただ欲しい:

{"id":6,"name":"someName"}

したがって、Backbone.js などのクライアント ライブラリで使用できます。

JSONマーシェリングでこれを強制する方法(注釈)はありますか?

サム、

4

3 に答える 3

3

私はまったく同じ問題に直面しました。いくつかの調査を行った後、私は人々が投棄の代わりにresteasy-jackson-providerを使用することを提案しているのを見つけました。投棄にはいくつかの問題があり、あなたが経験しているのはそのうちの1つであると主張されました。私はジャクソンに切り替えて、それがこの問題とおそらく私が気付いていなかった他のいくつかの問題を解決したことを発見しました。Mavenを使用している場合:

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson-provider</artifactId>
    <version>2.1.0.GA</version>
</dependency>

これを行うと、投棄の間でいくつかの衝突が発生する可能性があります。これらを回避するには、クラスパスに投棄瓶がないことを確認してください。

于 2011-12-15T07:50:19.433 に答える
1

次のようにBackbone.Modeを定義できます。

var Car = Backbone.Model.extend({
    defaults: function() {
        return {Car: {id: 0, name: 'bar'}};
    }
}
于 2012-05-08T03:46:51.720 に答える
1

「JAX-RS - Apache CXF のルート ノードのない JSON」という回答で、投棄関連のソリューションを見つけました。

Jettison には、dropRootElementその名前が示すとおりのパラメーターがあります。私の場合、Configuration-objectを次のように追加するとうまくいきました。

Configuration configuration = new Configuration();
configuration.setDropRootElement(true);

new JettisonMappedXmlDriver(configuration)
    .createWriter(this.getOutputStream()));

それが役に立てば幸い...

于 2015-01-22T09:14:40.360 に答える