14

Spring3.1.2アプリケーションを実行しています。いくつかのメソッドを備えたRESTfulサーブレットがあります。GETメソッドは@PathVariables、100%の時間、素晴らしい機能を果たしています(マッチング、Acceptヘッダーに基づいてJSONまたはXMLに正しくマーシャリングされた応答など)。

ただし、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);
}

required = false:すべてが機能します(パラメーターが受信されて解釈されます)。正確に私はそれが機能することを期待しています

required = true :(またはこれがデフォルトであるため指定されていません)「MissingServletRequestParameterException:必須の文字列パラメーター'test'が存在しません」というメッセージが一貫して表示されます

クライアント側のビュー:

required = 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

required = 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あり、パラメーターが渡されていることがわかります。パラメータがオプションの場合、Springはそれを正しく処理します。

誰かが以前にこれに出くわしたことがあるか、何かアイデアがあれば、私はそれらを聞いてみたいです。必須パラメーターをオプションとしてマークすることは、それが機能する場合でも、コメントしてもひどい自己文書化です。それに加えて、その行動は私を少し緊張させています。うまくいけば、私はどこかで何かを台無しにした...

4

1 に答える 1

19

あなたのヘッダーは私が思うにContent-Typeあるべきです。application/x-www-form-urlencoded

于 2012-10-24T19:16:13.560 に答える