0

我正在使用带有 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 中完成了这项工作。

干杯

4

1 回答 1

0

尝试这个

@GET
Response readAll() {
   ok DataPoint.findAll()
}
于 2013-12-10T05:40:07.867 回答