我正在使用Spring 3.1为 iPhone 和 android 应用程序创建一个 Restful 网站和 Web 服务。在我的应用程序中,我使用 Spring Message Converters ( org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
) 将 JSON 转换为 Java 对象,反之亦然。
我的目标是 JSP 页面、Iphone/Andois 应用程序应该只使用一个控制器方法(相同的 URL)。
在下面的帮助下,我正在使用Spring 表单标记从 JSP 到控制器的对象绑定@ModelAttribute
。
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@ModelAttributeForgot forgotPassword,
HttpServletRequest request) {
System.out.println("data recived=="+forgotPassword.getNewPassword());
}
但是,如果从 iPhone/Android 应用程序发布数据并且结果是:
收到的数据==空;
所以为了克服这个问题,我@RequestBody
在@ModelAttribute
.
所以我的控制器如下所示:
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody Forgot forgotPassword,
HttpServletRequest request) {
System.out.println("data recived=="+forgotPassword.getNewPassword());
}
然后它起作用了,我得到的结果是:
收到的数据==一些数据;
但是 @RequestBody 然后不适用于 JSP 页面上的 spring 表单,并且数据不会转换为对象并且我得到了null
值。
- 我不能使用
@RequestBody
注释从 JSP 页面中使用带有 spring 表单标签的 JSON 形式发布数据吗? - 有什么方法可以通过仅使用单个控制器方法(@ModelAttribute 或 @RequestBody)从我的 JSP 表单以及我的电话应用程序中发布数据。
编辑:
在代替 Bean 类编写String
时,我能够以纯文本形式获取内容,如下所示:
@RequestMapping(value = "reset-password", method = RequestMethod.POST)
public ModelAndView resetPassword(@RequestBody String string,
HttpServletRequest request) { }
网页调用结果:
uid=11&confirmPassword=somepassword&newPassword=somepassword
iPhone 使用 Web 服务调用的结果(在 **JSON 中)**
{"newPassword":"somepassword","confirmPassword":"somepassword","uid":"11"}
但问题是使用这种方法我必须手动将 JSON 字符串解析为 Java 对象。在网页内容中,我必须手动找到我不想要的值。
请帮忙。
问候,
阿伦·库马尔