Spring not accepting a POST parameter unless @Requ

2019-08-01 20:36发布

我运行一个Spring 3.1.2应用程序。 我有许多方法一个RESTful的servlet。 的GET方法工作奇妙( @PathVariables匹配,响应正确编组到JSON或XML基于Accept首部等)的100%的时间。

然而POST方法是根本无法工作。 经过与转换和所有其他春季方面我能找到(所有修修补补恢复)乱搞的时间,我缩小它尽到required字段@RequestParam 。 这是我一直在使用,调查的简化测试方法:

@RequestMapping (value = "/bogus",
                 method = POST)
public @ResponseBody PassResponse bogus (
            @RequestParam (value = "test", required = false) String test) {
    // Just some handy garbage objects that marshal to JSON/XML
    UserResponse user = new UserResponse ();
    user.setName (test);
    AccountDetail detail = new AccountDetail (user,null);
    return new PassResponse (detail);
}

需要=假 :一切正常(参数接收和解释)。 正是我期望它的工作

需要=真 :(或者没有指定,因为这是默认值)一致我得到的消息“MissingServletRequestParameterException:String类型,必需参数‘测试’不存在

客户端的观点:

需要= TRUE

Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:400 Bad Request
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Connection:close
Content-Length:971
Content-Type:text/html;charset=utf-8
Date:Wed, 24 Oct 2012 18:41:05 GMT
Server:Apache-Coyote/1.1

需要= FALSE

Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Content-Type:application/json;charset=UTF-8
Date:Wed, 24 Oct 2012 18:44:03 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked

这是完全相同的测试套件的时候切换正在运行的required ,我可以看到的参数被传递。 当参数是可选的,春天正确处理它。

如果有人碰到这个运行之前或有任何想法,我很愿意听到他们的声音。 标记所需的参数为可选的,即使它的工作原理,就是即使我评论这可怕的自我文档。 加上行为让我有点紧张。 但愿我只是拧东西了地方...

Answer 1:

Content-Type头应该是application/x-www-form-urlencoded我想。



文章来源: Spring not accepting a POST parameter unless @RequestParam “required=false”
标签: spring rest