10

Spring 3.1を使用して、Restful Web サイトと iPhone および Android アプリ用の Web サービスを作成しています。私のアプリケーションでは、Spring Message Converter ( org.springframework.http.converter.json.MappingJacksonHttpMessageConverter) を使用して JSON を Java オブジェクトに、またはその逆に変換しています。

私の目的は、JSP ページ、Iphone/Andois アプリで使用する必要がある単一のコントローラー メソッド (同じ URL) のみが存在することです。

以下のような助けを借りて、JSPからコントローラーへのオブジェクトバインディングにSpringフォームタグを使用してい@ModelAttributeます。

@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@ModelAttributeForgot forgotPassword,
     HttpServletRequest request) { 

     System.out.println("data recived=="+forgotPassword.getNewPassword());
 }

ただし、データが iPhone/Android アプリから投稿され、結果が次の場合、同じことは機能しません。

受信したデータ==null;

したがって、この問題を克服するため@RequestBodyに、の代わりに注釈を使用しました@ModelAttribute

したがって、私のコントローラーは次のようになります。

@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody Forgot forgotPassword,
    HttpServletRequest request) { 

    System.out.println("data recived=="+forgotPassword.getNewPassword());
}

それはその後動作し、私が得た結果は次のとおりです。

受信したデータ==somedata;

しかし、@RequestBody は JSP ページのスプリング フォームでは機能せず、データはオブジェクトに変換されず、null値が取得されます。

  1. @RequestBodyアノテーションを使用して、JSP ページから spring form タグを使用して JSON の形式でデータを投稿することはできませんか??
  2. 単一のコントローラー メソッド (@ModelAttribute または @RequestBody) のみを使用して、JSP フォームと電話アプリからデータを投稿できる方法はありますか。

編集:

StringBean クラスの代わりに書き込んでいる間、以下のようにプレーン テキストの形式でコンテンツを取得できます。

@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody String string,
     HttpServletRequest request) { }

Web ページ呼び出しの結果:

uid=11&confirmPassword=somepassword&newPassword=somepassword

Web サービス呼び出しを使用した iPhone からの結果 (**JSON 内)**

{"newPassword":"somepassword","confirmPassword":"somepassword","uid":"11"}

しかし問題は、このアプローチを使用すると、JSON 文字列を手動で Java オブジェクトに解析する必要があることです。また、Web ページのコンテンツでは、不要な値を手動で見つける必要があります。

助けてください。

よろしく、

アルン・クマール

4

2 に答える 2

3

申し訳ありませんが、@ModelAttribute はフォーム ポスト パラメーターからバインドされ、@RequestBody は本体を Json コンバーターに直接渡すため、方法があるとは思いません。スプリング フォーム タグを単純な json 投稿に置き換えることもできますが、それはおそらく 2 つの @RequestMapping メソッドを使用するよりも不便です。

于 2012-11-05T10:30:10.150 に答える
0

その @RequestBody です。@RequestMapping を使用して、出力として期待および生成する MIME タイプを指定する方が良いと思います。

  @RequestMapping(value="/authenticate",produces="application/json",   
consumes="application/json",method=RequestMethod.POST)

次に、適切なメッセージ コンバーターをAnnotationMethodHandlerAdapterに登録します。

このメッセージ コンバーターは、属性の生成と消費に基づいて、要求と応答エンティティのマーシャリングとアンマーシャリングを担当します。

<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
     <property name="order" value="1" />
         <property name="messageConverters">
         <list>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >

                 <property name="supportedMediaTypes" value="application/json"/>
            </bean>
            <bean class = "org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
            </bean>
         </list>
    </property>
</bean>
于 2012-11-06T11:22:22.780 に答える