【问题标题】:How to POST a collection of domain objects with JAX-RS grails如何使用 JAX-RS grails 发布域对象的集合
【发布时间】:2013-09-03 00:49:53
【问题描述】:

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

干杯

【问题讨论】:

    标签: rest grails jax-rs


    【解决方案1】:

    试试这个

    @GET
    Response readAll() {
       ok DataPoint.findAll()
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 2012-07-31
      • 1970-01-01
      • 2014-07-11
      • 2017-05-26
      相关资源
      最近更新 更多