我正在尝试在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)
}
}
答案 0 :(得分:4)
所以allowedMethods只是阻止你获得一个GET请求来保存(),你真正想要的是Restful Mappings所以而不是用
映射"/api/lab"(controller: "lab")
使用
"/api/labs"(resources: "lab")
这会将您的POST映射到/ api / labs到save()
方法。如果您不想在休息控制器中使用复数形式,则可以使用resource
代替,但我大部分时间都使用复数形式。我希望列出一些我支持的方法,并使用includes:['index', 'show']
执行此操作,这样我就可以轻松支持一些操作。