2016-10-22 22 views
1
private ArrayList<NameValuePair> mParams; 
HttpClient client = new DefaultHttpClient(); 

mParams = new ArrayList<NameValuePair>(); 
mParams.add(new BasicNameValuePair("testKey", "John")); 
mParams.add(new BasicNameValuePair("testSerial", "003-100")); 
HttpPost request = new HttpPost("http://localhost:8080/test/getRequiredEnv"); 

request.setEntity(new UrlEncodedFormEntity(mParams, HTTP.UTF_8)); 
HttpResponse response = client.execute(request); 

// TestController.javaSpring MVCコントローラでHttpRequest getEntityデータを取得するには?

@RestController 
public class TestController { 

private static final Logger logger = Logger.getLogger(TestController.class); 

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST) 
public @ResponseBody ResponseInfo getRequiredEnv(
       @RequestParam("testKey") String testKey, 
       @RequestParam("testValue") String testValue, 
       @RequestHeader HttpHeaders headers) { 

    logger.info("Test Key [" + testKey + "]"); 
    logger.info("Test Value [" + testValue + "]"); 

    return new TestResponseInfo("0001", "ABC"); 
} 

誰かが、これはSpringMVCの残りのコントローラで「Request.setEntity」からデータを取得するための正しい方法であるか、私は何かが欠けています教えてくださいことはできますか?

第2に、郵便受け "httpPost"リクエストでは、ヘッダ(header)または本文としてパラメータ(testKey & testValue)を渡しますか?

第3に、httpPostリクエストのパラメータを知らなくても、着信リクエストを解析して、Springコントローラのパラメータを抽出できますか?

答えて

0

まず、送信されるリクエストのコンテンツタイプを知っておくとよいでしょう。

私はあなたがリクエストの本文を取得したいと思います。

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST) 
public @ResponseBody ResponseInfo getRequiredEnv(
      @RequestParam Map<String, String> allParams, 
      @RequestHeader HttpHeaders headers) 

をしかし、それはまたのContentに依存しているため、私はこれが動作するかどうかわからない:あなたはすべてのparamsを取得するタイプMap<String, String>@RequestParamを使用することができ、事前にパラメータ名がわからない場合は、すべてのリクエストパラメータを取得するにはタイプ。例えば。フォームデータ(application/x-www-form-urlencoded)約つのデフォルト・メッセージ・コンバータFormHttpMessageConverterのを述べ約@RequestBodyスプリングドキュメントを見た:

FormHttpMessageConverterはへ/ MultiValueMapからフォームデータを変換します。

ので、試してみてください。

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST) 
public @ResponseBody ResponseInfo getRequiredEnv(
      @RequestBody MultiValueMap<String, String>, 
      @RequestHeader HttpHeaders headers) 

はまたあなたのマップを取得しHttpServletRequest.getParameterMap()もあります。メソッドの引数としてHttpServletRequest requestを含めるだけでリクエストを得ることができます。ジャクソンを含むとき

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST) 
public @ResponseBody ResponseInfo getRequiredEnv(
     @@ModelAttribute Test myTestPojo, 
     @RequestHeader HttpHeaders headers) 

またはあなたは、アプリケーション/ JSONなどのデータを送信する可能性があり、:あなたは、事前に偶然にを知っている場合

@ModelAttributeとフォームデータに似ている、あなたのPOJOに注釈を付けることも、それほどのように動作するはずです依存関係、@RequestbodyはあなたのデータをPOJOにマップします。例えばを見てください。 Spring JSON request body not mapped to Java POJO

あなたの2番目の質問に関して、httpPostはPOSTリクエストであるため、bodyとしてパラメータを渡します。

+0

詳細については、@dudelを詳しく説明します。パラメータやその他の情報を知らなくても、クライアントから送信されたRAWリクエスト/データを単純に印刷する方法はありますか? –

+0

その場合は、 'HttpServletRequest'の' getInputStream() 'または' getReader() 'を使うことができますが、一度しか読むことができません。 – dudel

+0

パーフェクト。後のリンクに記載されているように、後でリクエスト/データを読むことはできますか? http://stackoverflow.com/questions/10457963/spring-rest-service-retrieving-json-from-request –

関連する問題