我想知道是否有人可以为我回答一个问题,因为我不太明白为什么当我手动将一个json对象传递给一个弹簧控制器时,我需要从请求输入流中读取一个json对象。
通常我使用json-rpc框架,它为我处理一切,所以我实际上不必手动执行此操作直到现在。一切正常,但我不明白为什么请求中没有任何内容,比如当你发布一个表单时,我不得不使用这段代码将我的对象映射到杰克逊:
BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
ChartParameters chartParameters = mapper.readValue(bis, ChartParameters.class);
我只想理解为什么我需要读入输入流并将其传递给jackson而不是能够获得一个我最初认为必须要做的字符串值。
提前感谢任何有用的答案。
答案 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所述。