2016-10-27 12 views
0

私はSpringのRestテンプレートを使用して、データを含むリクエストをWebサービスに投稿しています。 はここにある私のクライアントコードsnippet-SPRING:残りのテンプレートを使用して投稿要求にパラメータを渡すことができません

 RestTemplate restTemplate = new RestTemplate(); 

     MultiValueMap<String, RequestDefinition> map = new LinkedMultiValueMap<String, RequestDefinition>(); 
     map.add("requestJSON", someDataObject); 

     MappingJackson2HttpMessageConverter jsonHttpMessageConverter = new MappingJackson2HttpMessageConverter(); 
     restTemplate.getMessageConverters().add(jsonHttpMessageConverter); 

     HttpHeaders headers = new HttpHeaders(); 
     headers.setContentType(MediaType.APPLICATION_JSON); 

     restTemplate.postForObject(someUrl, map, String.class); 

ここでの問題は、私のサーブレットPOSTメソッドでは、requestJSONオブジェクトがnullとして来ているされて

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
      String reqJSONStr = (String) request.getParameter("requestJSON"); 

      // reqJSONStr is coming as null. No idea why 
      // some other logic follows here 
    } 

METHOD-私servetコードポストがあります。 誰かが私がここでやっている間違いを指摘できますか?私のコメントから

+0

あなたのデータは、request.getReader()内のどこかで、json形式のリクエスト本文にあると思います... – Reek

+0

優秀!はい、チェックしました。それは読者の中にある。どのようにパラメータとして渡すことができますか? – rufy

答えて

0

コピー:

私はあなたのデータを推測すると思いますが...どこかrequest.getReader()内部で、JSON形式でリクエストボディにとしてそれを渡す方法として

ですあなたのオブジェクトが複雑な場合(フィールドとして別のオブジェクトを持っている)、私はあなたがURLパラメータとしてすべてを渡すことができるとは思わない。そうでなければ、オブジェクトをURLパラメータとして送信する必要がある場合は、このようなものを試してください。また、サーブレットのオブジェクトをオブジェクトごとに読み込む必要があります。あなたが見ることができるように

RestTemplate rt = new RestTemplate(); 

rt.setMessageConverters(
     Arrays.asList(new HttpMessageConverter[]{new FormHttpMessageConverter(), new StringHttpMessageConverter()})); 

MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); 
map.add("some", someDataObject.getSomeProperty().toString()); 
map.add("another", someDataObject.getAnotherProperty().toString()); 

String resp = rt.postForObject("http://scooterlabs.com/echo", map, String.class); 

System.out.println(resp); 

は、符号化されたパラメータをURLにオブジェクトを変換することができますHttpMessageConverterがないので、あなたは、コンバータのリストにMappingJackson2HttpMessageConverterを入れて、その要求にオブジェクトを追加しようとすると、それは次のようになりますJSONに変換され、リクエストBODYで終了します。

個人的には、自分のサーブレットコードをbodyからJSONを読み取れるものに変更したいと思います。 JSONは、URLエンコードされたフォームよりも多くのプロパティを持つ複雑なオブジェクトを送信しようとする場合には、より良い選択です。

+1

ありがとうReek。 StringHttpMessageConverterだけで問題を解決しました。 – rufy

関連する問題