2017-06-06 179 views
0

我有一個簡單的端點如下:格式的XML輸出

@RequestMapping("/foo") 
public Foo[] getFoo() { 
    List<Foo> list = new ArrayList<>(); 
    list.add(new Foo("bar")); 
    list.add(new Foo("baz")); 
    list.add(new Foo("bat")); 
    return list.toArray(new Foo[list.size()]); 
} 

當我如下使用捲曲發送給該端點的請求:

curl -i -H "Accept: application/xml" localhost:8080/foo 

的輸出是這樣的:

<Foos> 
<item> 
    <name>bar</name> 
</item> 
<item> 
    <name>baz</name> 
</item> 
<item> 
    <name>bat</name> 
</item> 
</Foos> 

有沒有辦法指示spring boot將項目更改爲Foo類的名稱?

這裏是Foo類:

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Foo { 

private String name; 

public Foo() { 
} 

public Foo(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 

澤西對於相同的端點和類輸出期望的格式(美孚代替項)。如何在不改變Foo類的情況下在spring mvn中實現這一點?

這裏是希望的XML輸出:

<Foos> 
<Foo> 
    <name>bar</name> 
</Foo> 
<Foo> 
    <name>baz</name> 
</Foo> 
<Foo> 
    <name>bat</name> 
</Foo> 

所以基本上我希望能夠有比沒有改變Foo類元素的名字控制。

+0

你可以在'xml'中添加你想要的輸出嗎?這會更容易理解你想要實現什麼。謝謝。 –

+0

@lazarov查看更新後的問題。 – coffeMug

回答

0

也許嘗試:

@XmlRootElement(name="Foos") 
    public class GetFooResponse{ 


     private List<Foo> someList; 


     @XmlElement(name="Foo") 
     public List<Foo> getSomeList() { 
      return someList; 
     } 

     public void setSomeList(List<Foo> someList) { 
      this.someList = someList; 
     } 

     public GetResponse(List<Foo> someListValue) { 
      this(); 
      this.someList = someListValue; 
     } 

     /** 
     * 
     */ 
     public GetResponse() { 
      // TODO Auto-generated constructor stub 
     } 
    } 

這將可能產生你想要的輸出。您必須從Foo[] - >GetFooResponse替換您的方法的返回類型。

+0

謝謝,但不幸的是我不能與包裝解決方案。因爲這會影響json輸出,這是不可取的。 – coffeMug

+0

至少可以爲Foo.class添加額外的註釋,或者它是從某些* .wsdl文件自動生成的,並且您不允許以任何方式對其進行修改? –

+0

我無法更改Foo類的原因是由Jax rs中實現的其他服務使用它。我在spring引導中實現了一個類似的服務,所以想要在不改變域對象的情況下獲得確切的輸出。 – coffeMug