2

私はいくつかのWebサーバーで作業しており、Webサービスにデータを送信してステータスコードを取得する必要があります..おそらくこれはGETではなくPOSTである必要があると考えていますが、すべてのプロから聞きたいです.インターネット上で。

Spring RESTTemplate を使用したクライアント コードを次に示します。

vars.put("lastName", "JOHN");
vars.put("firstName", "SMITH");
vars.put("middleInitial", "");
vars.put("socialSecurityNumber", "111-11-1111");
vars.put("Type","A");
vars.put("FileNumber","");
vars.put("EISNumber","");


String jsonreturn = restTemplate.getForObject("http://" + mRESTServer.getHost() + ":8080/services/api/checkstatus", String.class, vars);

これが私のサービス側のコードです (Spring MVC RESTful サービス)。クライアントに入力したすべてのフィールドは ModelMap オブジェクトにあると思いますが、そうではありません

@RequestMapping(value = "/checkstatus", method = RequestMethod.get)
@ResponseBody
public ResponseEntity<String> getCheckEnrollStatus(ModelMap model) throws ResourceNotFoundException
{
        logger.debug("Looking for  Status: " + model.toString());
}

だから私は2つの質問があります:

1) サーバーに大量のデータを送信するため、GET を POST に変更する必要がありますか?

2) get のままにしておくと、ModelMap が空になるのはなぜですか?

私を助けてください

4

3 に答える 3

1

設定するModelMapには、おそらく で注釈を付ける必要があります@RequestBody

コメントが指摘しているように、仕様に従って GET を含むリクエスト本文を使用することはできません。そのため、パラメーターを URL の一部にして、get または convert を使用して POST に変換する必要があります。

POST は通話の目的に合わないようですが。

于 2013-06-19T15:03:17.863 に答える
1

通常、これはGETであるべきだと思いますがsocialSecurityNumber、パラメーターの1つとして持っていることに気付きました。それを URL の一部にしたくないことは間違いありません。RFC 2616 セクション 15.1.3を確認してください

HTTP プロトコルを使用するサービスの作成者は、機密データの送信に GET ベースのフォームを使用すべきではありません。これにより、このデータが Request-URI でエンコードされるためです。多くの既存のサーバー、プロキシ、およびユーザー エージェントは、第三者に見える可能性のある場所にリクエスト URI を記録します。サーバーは、代わりに POST ベースのフォーム送信を使用できます

POST を実行します。

于 2013-06-19T15:34:08.157 に答える
0

サーバー上で何も変更していないため、ここでデータを返すだけが仕様です。

このようなリクエストパラメータを使用してください

@RequestMapping(value = "/checkstatus", method = RequestMethod.get)
@ResponseBody
public ResponseEntity<String> getCheckEnrollStatus(@RequestParam final Long id) 

または uri パラメータなど

@RequestMapping(value = "/checkstatus/{id}", method = RequestMethod.get)
@ResponseBody
public ResponseEntity<String> getCheckEnrollStatus(@PathVariable final Long id) throws ResourceNotFoundException
{
于 2013-06-19T15:00:26.123 に答える