Grails RESTful控制器。 POST命中index()而不是save()

时间:2014-10-10 19:09:31

标签: json rest grails

我正在尝试在Grails 2.3.4中创建一个RESTful控制器。我正在完全遵循文档,但是,每当我尝试POST时,我总是点击索引方法。我可以让save()工作的唯一方法是删除索引方法。这对我没有任何意义。

我已经尝试过扩展RestfulController超类:http://grails.org/doc/2.3.4/guide/webServices.html#extendingRestfulController

并实施我自己的方法:http://grails.org/doc/2.3.4/guide/webServices.html#restControllersStepByStep

然而,当我发布到我的网址时,它只会点击索引方法,无论是我正在扩展的RestfulController中的那个,还是我自己的方法。

我在UrlMappings.groovy中有"/api/lab"(controller: "lab") 我在我的mime类型中定义了json: ['application/json', 'text/json'],

我尝试在控制器中添加和删除static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

但不管我做什么,我似乎无法点击保存()。

当我实现自己的控制器时,这是我的控制器:

class LabController {
static responseFormats = ['json']

def userService

def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    Patient patient = userService.currentUser.patient
    render PatientLab.findAllByPatientAndType(patient, LabType.findByName(LabType.LAB_TYPE_INR)) as JSON
}

@Transactional
def save() {
    Patient patient = userService.currentUser.patient
    LabType inrType = LabType.findByName(LabType.LAB_TYPE_INR)

    boolean labAlreadyExists = PatientLab.findByPatientAndLabDateAndType(patient, request.JSON.labDate, inrType)

    if (labAlreadyExists) {
        render {result: "Lab already exists"} as JSON
        return
    }

    PatientLab patientLab = new PatientLab()
    patientLab.patient = patient
    patientLab.origin = LabOrigin.MOBILE_APP
    patientLab.type = inrType
    patientLab.result = request.JSON.result
    patientLab.measurement = UnitType.findByUnit(UnitType.UNIT_TYPE_NONE)
    patientLab.labDate = new Date()

}
}

扩展RestfulController时,这是我的控制器:

class LabController extends RestfulController {
static responseFormats = ['json']

LabController() {
    super(PatientLab)
}
}

1 个答案:

答案 0 :(得分:4)

所以allowedMethods只是阻止你获得一个GET请求来保存(),你真正想要的是Restful Mappings所以而不是用

映射
"/api/lab"(controller: "lab")

使用

"/api/labs"(resources: "lab")

这会将您的POST映射到/ api / labs到save()方法。如果您不想在休息控制器中使用复数形式,则可以使用resource代替,但我大部分时间都使用复数形式。我希望列出一些我支持的方法,并使用includes:['index', 'show']执行此操作,这样我就可以轻松支持一些操作。