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
値が取得されます。
@RequestBody
アノテーションを使用して、JSP ページから spring form タグを使用して JSON の形式でデータを投稿することはできませんか??- 単一のコントローラー メソッド (@ModelAttribute または @RequestBody) のみを使用して、JSP フォームと電話アプリからデータを投稿できる方法はありますか。
編集:
String
Bean クラスの代わりに書き込んでいる間、以下のようにプレーン テキストの形式でコンテンツを取得できます。
@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 ページのコンテンツでは、不要な値を手動で見つける必要があります。
助けてください。
よろしく、
アルン・クマール