2011-11-22 51 views
4

我正在使用RESTEasy將Java對象作爲JSON對象(使用Jettison Mapped Convention for JSON marshelling)返回。RESTEasy/Jettison,將Java對象作爲JSON返回,但沒有根節點

但我不希望它返回根節點。

例如

@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 marshelling?

山姆,

+0

山姆,你有沒有發現你的問題任何回答? –

回答

3

我面臨着相同問題。在做了一些研究之後,我發現人們建議使用resteasy-jackson提供者而不是拋棄。 據稱,拋棄有幾個問題,你所遇到的是其中之一。我轉向傑克遜,發現它解決了這個問題,可能還有其他幾個我沒有意識到的問題。 如果你正在使用maven:

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

如果你這樣做,你可能會看到拋放之間的一些衝突。爲了避免這些,請確保您的classpath上沒有垃圾桶。

1

你可以定義你Backbone.Mode這樣的:

var Car = Backbone.Model.extend({ 
    defaults: function() { 
     return {Car: {id: 0, name: 'bar'}}; 
    } 
} 
1

我發現了答案"JAX-RS - JSON without root node in apache CXF"一個拋放相關的解決方案。

Jettison有一個名爲dropRootElement的參數,名稱如此。在我的情況,作如下補充一個Configuration -object做的工作的:

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

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

希望它可以幫助...

+0

謝謝,當你需要/想要堅持使用'JettisonMappedXmlDriver'時,這會有很大幫助! – Laimoncijus