【问题标题】:Grails 2.0.0: HTTP status 302Grails 2.0.0:HTTP 状态 302
【发布时间】:2011-12-21 23:58:24
【问题描述】:

我有一个控制器,它只允许对某些操作进行 POST:

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

然后有一个测试:

void testUpdateWithGet() {
    controller.update()
    assert response.status == HttpServletResponse.SC_METHOD_NOT_ALLOWED
} 

这在 2.0.0.RC1 中运行良好,但在升级到 Grails 2.0.0 最终版本后,响应中的返回状态为 302。这是为什么呢?

问候

乔纳斯

【问题讨论】:

  • 如果我明确设置方法,我会得到相同的request.method = "GET"。一些类似的测试甚至返回200,这意味着调用正常。
  • 值得一提的是,save 操作返回 200,所有控制器的 updatedelete 302。
  • 鉴于如果我不是从单元测试而是从命令行通过 curl 测试这个问题并且我无法重现您的 302,我猜想直接调用该方法的处理方式有问题。我建议删除您的 allowedMethods 标准并在您的控制器中打印出 request.method ,然后运行您的测试。只是为了让您可以看到默认值是什么。
  • @JanWikholm - 默认方法始终是 GET。

标签: grails post controller get httpresponse


【解决方案1】:

我可以确认您的测试用例。这是因为自 2.0.0.RC3 以来,Grails 也存在影响 2.0.0 最终版本的未解决错误:http://jira.grails.org/browse/GRAILS-8426 - 在单元测试中不尊重允许的方法。您可以降级到 2.0.0.RC1 或等待修复此错误。它只影响单元测试,但在应用程序中可以正常工作。

【讨论】:

  • 谢谢,出于某种原因,我预料到了这一点。不久前我升级到 RC3 并看到了问题并再次降级到 RC1。但是现在最终版本已经发布,我不想再降级了。所以,我很高兴等待这个错误得到解决。我用一个很大的评论调整了我的单元测试......
猜你喜欢
  • 2015-12-29
  • 2013-04-26
  • 2014-06-29
  • 1970-01-01
  • 2013-12-10
  • 2018-05-28
  • 2015-10-08
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多