2013-02-01 1 views
3

RESTful JSON 서비스에 대한 Spring MVC 3.2 비동기 지연 결과를 사용하려고합니다.JSON이 스프링 MVC 3.2를 사용하여 잘못 반환됩니다. 지연된 결과

동기 방식 사용 :

@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"}} 

:

@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"}} 

그래서 접두사가 붙은 빈 개체 (예 : {})? 분명히 바보 같은 일을하고 있습니까? 아니면 MappingJackson2JsonView이 새로운 비동기 기능과 잘 맞지 않습니까?

F.Y.I 여기 내 스프링 MVC 빈 구성입니다 :

<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

비어있는 {}은 지연이고, 채워진 것은 응답입니다 ... j/k! 이것은 동일한 문제가 될 수 있는지 모르겠지만, 나는 그것을 들어 그냥 떠날 것이다 : http://stackoverflow.com/questions/14376285/reverse-ajax-using-deferredresult-of-spring-3-2 -0-release-not-working-in-ie – CodeChimp

답변

1

난 정말 오히려 "답"이보다 더 언급하고 싶었다,하지만 난 아직 정도로 할 수없는입니다. 나는 너와 같은 결과를 얻고있다. MappingJackson2JsonView은 DeferredResult에서 제대로 작동하지 않는 것 같습니다. 나는 3.2.3 봄 업데이트하면 또한, 그 결과 JSON을 앞에 추가되었다 {} & 내 구성했다하더라도 & {} : <property name="prefixJson" value="false" />

이는 HttpServletRequestWrapper 및 필터에서를 작성 참여 해결하기 위해 내 초기 시도 결과를 손질 할 수는 있지만, 심지어 비동기 서블릿 (Async Servlet) 영역에서는 좋지 않은 것처럼 보입니다.

내 특정 응용 프로그램에서 작동하는 유일한 방법은 JavaScript를 사용하여 여분의 정크를 필터링하는 것입니다. 이것이 효과가있는 동안, 그것은 나 자신을 죽이거 나 최소한 손톱이나 두개를 꺼내고 싶어하게 만듭니다.

저는 이것이별로 도움이되지 않는다는 것을 알고 있습니다. 나는 당신이 볼에있는이 겉으로보기에는 단순한 고통에 대해 너무 울고 있다는 사실에 대해 위로를 얻으시기 바랍니다.

관련 문제