【发布时间】:2012-11-05 09:52:21
【问题描述】:
我正在使用 Spring 3.1 为 iPhone 和 android 应用程序创建一个 Restful 网站和 Web 服务。在我的应用程序中,我使用 Spring 消息转换器 (org.springframework.http.converter.json.MappingJacksonHttpMessageConverter) 将 JSON 转换为 Java 对象,反之亦然。
我的目标是应该只有一个控制器 JSP 页面、Iphone/Andois 应用程序应该使用的方法(相同的 URL)。
我在@ModelAttribute 的帮助下使用 Spring 表单标签 将对象绑定从 JSP 到控制器,如下所示。
@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());
}
然后它起作用了,我得到的结果是:
收到的数据==一些数据;
但是 @RequestBody 然后不适用于 JSP 页面上的 spring 表单,并且数据没有转换为对象,我得到了 null 值。
- 我不能使用
@RequestBody注释以 JSON 的形式发布数据吗 带有来自 JSP 页面的 spring 表单标签?? - 有什么方法可以将我的 JSP 表单中的数据发布为 以及通过仅使用单个控制器方法(@ModelAttribute 或 @RequestBody)从我的电话应用程序。
编辑:
在编写 String 代替 Bean 类时,我能够以纯文本形式获取内容,如下所示:
@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 对象。在网页内容中,我必须手动找到我不想要的值。
请帮忙。
问候,
阿伦库马尔
【问题讨论】:
标签: spring rest spring-mvc