我是第三方应用发布数据的控制器操作, 问题是POST请求参数是空的,这是由于POST Content-Type =' text'。 如果我使用Content-Type =' application / x-www-form-urlencoded'模拟(使用Chrome Rest控制台插件)相同的POST 请求参数正确填写。
如何使用Content-Type =' text'?
启用POST数据答案 0 :(得分:0)
您可以使用
访问原始POST数据request.reader.text
据我所知(并且我可能错了)grails将不会解析此内容类型,因为它最终使用HTTPServletRequest
,它只解析www-form-urlencoded
,因为这是正常的方式通过HTTP传递变量值。
您可以使用grails过滤器轻松模拟您想要的行为,例如:
class TextRequestFilters {
def filters= {
textRequestFilter(controller: '*', action:'*') {
before = {
if(request.post && request.format == 'text') {
String postBody = request.reader.text
String[] variables = postBody.split('&')
variables.each { String variable ->
String[] parts = variable.split('=')
String key = URLDecoder.decode(parts[0], request.characterEncoding)
String value = URLDecoder.decode(parts[1], request.characterEncoding)
params[key] = value
}
}
}
}
}
}
注意:
您可能希望从此过滤器中排除资产请求等。
内容类型应为text/plain
,因为这就是grails转换为开箱即用的文本格式,但我相信您可以在Config.groovy
中进行设置。