我正在使用Grails在2.3中引入的REST支持.我的应用包括以下域类:
@Resource(formats=['json', 'xml'])
class Sensor {
String name
static hasMany = [metrics: Metric]
}
@Resource(formats=['json', 'xml'])
class Metric {
String name
String value
static belongsTo = [sensor: Sensor]
}
Run Code Online (Sandbox Code Playgroud)
在UrlMappings.groovy
我已经定义了以下嵌套的RESTful URL映射:
"/api/sensors"(resources: 'sensor') {
"/metrics"(resources: "metric")
}
Run Code Online (Sandbox Code Playgroud)
如果我导航到URL,/api/sensors/1/metrics
我希望响应显示与ID 1 Metric
关联的所有实例Sensor
,但实际上它返回所有Metric
实例(最多10个)
Metric
与特定Sensor
实例关联的实例(不实现我自己的控制器)?max
请求添加参数)?看起来并不那么简单.:)如果运行此命令,我们可以得到生动的图片:
grails url-mapping-report
Run Code Online (Sandbox Code Playgroud)
查看
Controller: metric
| GET | /api/sensors/${sensorId}/metrics | Action: index |
| GET | /api/sensors/${sensorId}/metrics/create | Action: create |
| POST | /api/sensors/${sensorId}/metrics | Action: save |
| GET | /api/sensors/${sensorId}/metrics/${id} | Action: show |
| GET | /api/sensors/${sensorId}/metrics/${id}/edit| Action: edit |
| PUT | /api/sensors/${sensorId}/metrics/${id} | Action: update |
| DELETE | /api/sensors/${sensorId}/metrics/${id} | Action: delete |
Run Code Online (Sandbox Code Playgroud)
所以,我们至少需要一个MetricController
继承RestfulController
和覆盖index()
来做一个额外的检查Metric
和返回列表Sensor
,如下所示:
class MetricController extends RestfulController<Metric> {
static responseFormats = ['json', 'xml']
MetricController() {
super(Metric)
}
@Override
def index() {
def sensorId = params.sensorId
respond Metric.where {
sensor.id == sensorId
}.list()
}
}
Run Code Online (Sandbox Code Playgroud)
以上更改将提供/api/sensors/1/metrics
命中时的预期结果(包括对分页结果的限制).
归档时间: |
|
查看次数: |
2501 次 |
最近记录: |