Java 使用Ajax发布JSON对象

Java 使用Ajax发布JSON对象,java,ajax,json,spring,jackson,Java,Ajax,Json,Spring,Jackson,我想知道是否有人能为我回答一个问题,因为我不太明白为什么当我手动将json对象传递给spring控制器时,我需要从请求输入流中读取json对象 通常我使用json rpc框架,它为我处理所有事情,所以直到现在我才真正需要手动完成。一切正常,但我不明白的是,为什么请求中没有类似于您发布表单时的内容,而是我必须使用以下代码将我的对象映射到Jackson: BufferedInputStream bis = new BufferedInputStream(request.getInputStream(

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

通常我使用json rpc框架,它为我处理所有事情,所以直到现在我才真正需要手动完成。一切正常,但我不明白的是,为什么请求中没有类似于您发布表单时的内容,而是我必须使用以下代码将我的对象映射到Jackson:

BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
ChartParameters chartParameters = mapper.readValue(bis, ChartParameters.class);
我只是想理解为什么我需要读入输入流并将其传递给jackson,而不是像我第一次想的那样,以字符串的形式获取值


提前感谢您提供的有用答案。

您可以将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>

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

@ResponseBody
public Chart handleChartJsonRPC(@RequestBody ChartParameters chartParameters) throws Exception {
    return jsonService.getBarChart(chartParameters);
}
这(显然)假设您的
jsonService
返回一个
Chart
对象,该对象在发送回浏览器之前应序列化为JSON


确保您有一个MessageConverter,它可以将您的对象与JSON进行(反)序列化,如@user2054820所述。

您能显示Spring控制器中使用这两行的相关部分吗?一点上下文可能会澄清……我对事物的Spring方面不是很感兴趣,除非原因纯粹与Spring有关?我没有编写一个简单的servlet来测试我是否还需要做同样的事情。以下是控制器方法:public void handleChartJsonRPC(HttpServletRequest,HttpServletResponse)抛出异常{jsonService.getBarChart(request,response);}好吧,我之所以要得到流,是因为链中没有消息转换器?很可能是因为这个原因,但是只有两行代码上下文就有点难说。好的,谢谢,现在我不得不假设这是正确的答案,谢谢上面的代码片段。我计划转换我的图表对象,该对象由Jackson手动返回,然后在响应中返回,但使用消息转换器和annotations方法看起来是更好的选择。