10

我正在使用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值。

  1. 我不能使用@RequestBody注释从 JSP 页面中使用带有 spring 表单标签的 JSON 形式发布数据吗?
  2. 有什么方法可以通过仅使用单个控制器方法(@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 对象。在网页内容中,我必须手动找到我不想要的值。

请帮忙。

问候,

阿伦·库马尔

4

2 回答 2

3

抱歉,但我不相信有办法,因为 @ModelAttribute 是从表单发布参数绑定的,而 @RequestBody 将正文直接传递给 Json 转换器。您可以用一个简单的 json 帖子替换 spring 表单标签,但这可能不如拥有两个 @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 回答