我正在尝试将Spring MVC 3.2异步延迟结果用于RESTful JSON服务。
使用同步方法:
@ResponseBody
@RequestMapping(value = "/catalog", method = RequestMethod.GET, produces = "application/json")
public Entry catalog() {
Entry entry = new Entry();
entry.timestamp = System.currentTimeMillis();
entry.summary = "Hello World!";
entry.body = new HashMap<String, Object>();
entry.body.put("key1", "value1");
entry.body.put("key2", "value2");
entry.body.put("key3", "value3");
return entry;
}
我得到以下JSON结果:
{"timestamp":1359721240340,"summary":"Hello World!","body":{"key3":"value3","key2":"value2","key1":"value1"}}
使用异步方法(人为的例子):
@ResponseBody
@RequestMapping(value = "/catalogs", method = RequestMethod.GET, produces = "application/json")
public DeferredResult<Entry> catalogs() {
Entry entry = new Entry();
entry.timestamp = System.currentTimeMillis();
entry.summary = "Hello World!";
entry.body = new HashMap<String, Object>();
entry.body.put("key1", "value1");
entry.body.put("key2", "value2");
entry.body.put("key3", "value3");
DeferredResult<Entry> result = new DeferredResult<Entry>();
result.setResult(entry);
return result;
}
我得到以下内容:
{}{"timestamp":1359721240340,"summary":"Hello World!","body":{"key3":"value3","key2":"value2","key1":"value1"}}
那么前缀空对象(即{})的处理是什么?我做了一些显然很愚蠢的事情,或者MappingJackson2JsonView
对新的Async功能不起作用吗?
F.Y.I这是我的Spring MVC bean配置:
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="contentNegotiationManager">
<bean class="org.springframework.web.accept.ContentNegotiationManager" />
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</list>
</property>
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
答案 0 :(得分:1)
我真的想评论而不是“回答”这个,但我还是无法做到。我得到的结果与你相同。 MappingJackson2JsonView
似乎与DeferredResult无法正常工作。此外,一旦我更新到Spring 3.2.3,生成的JSON前缀为{}&amp;&amp; {}即使我在我的配置中:<property name="prefixJson" value="false" />
我最初尝试解决此问题涉及编写HttpServletRequestWrapper
和过滤器,我可以从中删除结果,但即使这样也不能在Async Servlet中很好地发挥作用。
我发现为我的特定应用程序工作的唯一方法是使用JavaScript过滤掉额外的垃圾。虽然这有效,但它确实让我想要自杀或者至少拉出一两个指甲。
我知道这不是很有帮助。我希望你能找到一些安慰,因为我也在为这个看似简单的球痛而哭泣。