如何在grails中进行方法POST?

时间:2019-04-04 05:33:52

标签: java rest post grails groovy

我创建了一个方法,并从Postman客户端(POST)调用进行了调用,但是它没有识别出它,我没有URL中的参数,我正在将数据传递给正文,但仍将其视为GET调用。 任何帮助表示赞赏 我已经定义了以下有关控制器动作的代码,

@RestApiMethod(verb = RestApiVerb.POST)

也按照Grails Allowedmethods进行了尝试,但无法正常工作。 到目前为止,我的网址映射,

 "/api/guest/v1/$aController/$aAction?(.$format)?"{
        controller ={ "${params.aController}Api" }
        action = { "${params.aController}_${params.aAction.replaceAll("-","_")}" }
        view = null
    }

我正在使用Grails 2.5.1版本。

要使我的方法成为POST,我还需要做哪些其他更改?

1 个答案:

答案 0 :(得分:0)

由于您没有提及任何有关您的环境的信息(grails版本,URL映射等),因此很难看出是什么导致了应用程序问题。

<uses-permission android:name="android.permission.READ_CALENDAR"/> <uses-permission android:name="android.permission.WRITE_CALENDAR"/> 批注与grails如何处理请求无关,它甚至不属于grails框架。我能找到的唯一参考来自五年前的一个非常老的rest-api-doc插件。

尝试将网址路径的新条目添加到long calID = 3; // Make sure to which calender you want to add event long startMillis = 0; long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2012, 9, 14, 8, 45); endMillis = endTime.getTimeInMillis(); ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(Events.DTSTART, startMillis); values.put(Events.DTEND, endMillis); values.put(Events.TITLE, "Hackathon"); values.put(Events.DESCRIPTION, "do some code"); values.put(Events.CALENDAR_ID, calID); values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); Uri uri = cr.insert(Events.CONTENT_URI, values); // get the event ID that is the last element in the Uri long eventID = Long.parseLong(uri.getLastPathSegment()); 文件中,例如:

@RestApiMethod(verb = RestApiVerb.POST)

更新:

无法理解为什么您需要在UrlMapping中执行类似的操作。 UrlMapping伪像上有两个自定义变量:UrlMappings/my_path/my_action controller: 'myController', action: 'myAction', method: 'POST',因此您无需执行任何其他操作即可识别它们。

网址映射:

controller

控制器代码:

action

"/api/guest/v1/${controller}/${action}?(.$format)?" { constraints { // apply constraints here } } 将是您的控制器名称,而package rest.api.test import grails.compiler.GrailsCompileStatic import grails.converters.JSON @GrailsCompileStatic class RestApiController { static allowedMethods = [index: 'GET', show: 'GET', save: 'POST', update: 'PUT', delete: 'DELETE'] def index() { renderJson() } def show() { renderJson() } def save() { renderJson() } def update() { renderJson() } def delete() { renderJson() } private void renderJson() { log.info("Receive data: ${params}") render([controller: controllerName, action: actionName, uri: actionUri] as JSON) } } 将是该控制器内的方法名称。因此,如果您拥有controller和方法action,则路径将为RestApiController

save将确保方法(操作)仅响应正确的HTTP方法,例如,在上面的控制器代码中,如果您尝试将GET设为/api/guest/v1/restApi/save,则将获得HTTP 405(不允许使用方法)。

更多详细信息可以在grails documentation上找到。