如何在Jersey中创建一个接受多个复杂参数的POST方法?

时间:2012-09-21 17:11:07

标签: java web-services rest jaxb jersey

我刚学会了如何通过JAXB映射将单个复杂对象发送到基于Jersey的REST Web服务:http://jersey.java.net/nonav/documentation/latest/xml.html#d4e820

但是,我想多做一点。

1)我可以使用一个接受多个复杂对象的方法,所有这些对象都是用JAXB注释的吗?我的意思是:

@POST
public void setPlanetAndGalaxy ( Planet planet, Galaxy galaxy ) { ... }

泽西岛是否允许这样的方法?使用泽西岛/客户端,客户对应部分会是什么样子?到目前为止,我的印象是我应该定义一个类似GalaxyPlanet {planet,galaxy}的包装器,我不太喜欢它。

2)是否可以为POST方法设置数组或集合参数?喜欢在:

@POST
public void setPlanets ( Planet ... planets ) {...}

@POST
public void setPlanets ( Set<Planet> planets ) {...}

@POST
public void setPlanetsAndGalaxies ( Set<Planet> planets, Set<Galaxy> galaxies )

在这三种不同的情况下,客户端代码会如何?

提前感谢您的帮助。 马可。

1 个答案:

答案 0 :(得分:2)

您应首先确定您的资源及其关系。如果你打算只处理星系和行星(例如)你的REST API路径就像

/galaxies/ --> You can deal with list of galxies here
/galaxies/{oneGalaxyId}  --> One galaxy
/galaxies/{oneGalaxyId}/planets --> Planets of a galaxy
/galaxies/{oneGalaxyId}/planets/{planetId} --> One planet among the planets of a galaxy.

您可以将List作为POST方法参数处理。
public void setPlanets ( List<Planet> planets ) {...}>可能无法接受多个复杂类型参数。