【问题标题】:Grails post giving 400 errorGrails 发布 400 错误
【发布时间】:2013-12-21 00:44:50
【问题描述】:

我在工作中学习 Grails,所以如果我看起来一无所知,请多多包涵。

我通过 IntelliJ 设置了多个 Grails 应用程序,使用默认的 Hibernate 设置、Tomcat 服务器,所有这些都非常普通。我通过终端创建了所有域模型、控制器等。一切都很好,当应用程序启动时,数据会从 BootStrap.groovy 中填充。但是当我尝试通过网络界面(通过 ajax 或 html 帖子)发布内容时,它会返回:
POST http://localhost:8080/BookApp/book/save 400 (Bad Request)
Grails 控制台中绝对什么都没有显示,即使所有内容都设置为记录信息。

这就是它开始变得奇怪的地方。当我 cURL 到保存路由时,它返回 201 并且数据会很好地填充到数据库中。

那么...我什至从哪里开始调试这个问题。

编辑Here's a link to the repo,如果您想查看源代码。

【问题讨论】:

  • 通过捕获和比较您在每个实例中发布的有效负载开始调试。

标签: grails


【解决方案1】:

我知道这对任何人都没有帮助,但我最终删除了笔记本电脑上与 Java 相关的所有内容,并从头开始。那是唯一真正有效的方法。

【讨论】:

    【解决方案2】:

    您需要在控制器中创建一个保存方法并在 UrlMappings 中添加一个条目以将 P​​OST 映射到该方法。由于此处的默认映射,当您通过 curl 执行 GET 时会得到 201:

        "/$controller/$action?/$id?(.${format})?"{
            constraints {
                // apply constraints here
            }
        } 
    

    添加这个:

        "book/save" {
            controller = "book"
            action = [POST: "save"]
        }
    

    到 UrlMappings.groovy

    并将其添加到您的控制器中:

               def save = { 
                   <whatever you want here>
                }
    

    【讨论】:

      【解决方案3】:

      我不确定我是否为时已晚,因为没有任何内容被接受为答案。我最近在使用 ajax call 发布数据时遇到了同样的问题。 问题是,我在请求中发送了太多数据作为请求参数,而它应该是正文的一部分。

      就是这样。只需将您的信息作为正文的一部分发送并使用 -> request.reader.text

      在 grails 操作中提取

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        在 BookController 和 save.gsp 视图中创建保存操作或将其重定向到另一个操作

        【讨论】:

          猜你喜欢
          • 2018-12-05
          • 1970-01-01
          • 1970-01-01
          • 2020-11-19
          • 2019-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-29
          相关资源
          最近更新 更多