我正在使用带有 grails(版本 0.8)的 JAX-RS 插件,并且我有一个表示单个数据点的域类
class DataPoint {
static hasOne = [user: User]
int time
int accelerationX
int accelerationY
int accelerationZ
....
}
现在我希望能够发布这些集合,以减少对服务器的点击次数(我们以高频率采样)。
我知道 JAX-RS 插件不支持域类集合作为输入,所以我在 src/groovy 中编写了一个 Wrapper
public class DataPoints {
List<DataPoint> data = new ArrayList<>();
public void add(DataPoint dataPoint) {
data.add(dataPoint)
}
public List<DataPoint> getData() {
return data
}
}
我使用了生成的资源类
@Path('/api/data')
@Consumes(['application/xml', 'application/json'])
@Produces(['application/xml', 'application/json'])
class DataPointCollectionResource {
def dataPointResourceService
@POST
Response create(DataPoints dto) {
created dataPointResourceService.create(dto) //overwritten to take wrapper class
}
@GET
Response readAll() {
DataPoints dataPoints = new DataPoints();
DataPoint.findAll().each {
dataPoints.add(it)
}
ok dataPoints
}
}
但是,这不起作用。
我尝试发布一些xml
<dataPoints>
<data>
<dataPoint>
<accelerationX>0</accelerationX>
<accelerationY>0</accelerationY>
<accelerationZ>0</accelerationZ>
<user id="1"/>
</dataPoint>
<dataPoint>
<accelerationX>0</accelerationX>
<accelerationY>0</accelerationY>
<accelerationZ>0</accelerationZ>
<user id="1"/>
</dataPoint>
</data>
</dataPoints>
使用卷曲
curl -H "Content-Type: application/xml" -H "Accept: application/xml" --request POST -d <xml data> <path to resource>
我得到的错误是:
ERROR container.ContainerRequest - A message body reader for Java class
com.wristband.atlas.SensorDataPoints, and Java type class
com.wristband.atlas.SensorDataPoints, and MIME media type application/xml was not found.
The registered message body readers compatible with the MIME media type are:
尝试在资源上做一个 GET 给了我几乎同样的事情。
我知道我遗漏了一些东西,因为在我不知道我遗漏了什么配置之前,我已经在 java 中完成了这项工作。
干杯