我创建了一个方法,并从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,我还需要做哪些其他更改?
答案 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上找到。