使用Ajax发布JSON对象

时间:2013-07-11 07:08:15

标签: java ajax json spring jackson

我想知道是否有人可以为我回答一个问题,因为我不太明白为什么当我手动将一个json对象传递给一个弹簧控制器时,我需要从请求输入流中读取一个json对象。

通常我使用json-rpc框架,它为我处理一切,所以我实际上不必手动执行此操作直到现在。一切正常,但我不明白为什么请求中没有任何内容,比如当你发布一个表单时,我不得不使用这段代码将我的对象映射到杰克逊:

BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
ChartParameters chartParameters = mapper.readValue(bis, ChartParameters.class);

我只想理解为什么我需要读入输入流并将其传递给jackson而不是能够获得一个我最初认为必须要做的字符串值。

提前感谢任何有用的答案。

2 个答案:

答案 0 :(得分:1)

您可以将JSON发布为字符串,然后配置:

    <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    </bean>
 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  <property name="messageConverters">
      <list>
        <ref bean="jacksonMessageConverter"/>
      </list>
 </property>
 </bean>

答案 1 :(得分:1)

如果您使用的是最近的Spring版本,则以下内容应足以让事情顺利进行:

@ResponseBody
public Chart handleChartJsonRPC(@RequestBody ChartParameters chartParameters) throws Exception {
    return jsonService.getBarChart(chartParameters);
}

这(显然)假设您的jsonService返回一个Chart对象,应该将其序列化为JSON,然后再将其发送回浏览器。

确保你有一个MessageConverter,它将(取消)将对象与JSON串行化,如@ user2054820所述。