2017-06-06 268 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