2014-10-21 5 views
0

나는 blueimp 파일 업로드 angularjs 버전을 사용하고 있으며 거의 ​​효과가 있습니다. 문제가있는 유일한 영역은 json 응답을 파싱하는 것입니다.Blueimp 파일 업로드 angularjs json 접두사

여기 anglejs 팀에서 권장 한대로 - https://docs.angularjs.org/api/ng/service/ $ http - 모든 유형의 application/json 응답에는 ")]} ', \ n"접두사가 붙어 있으며 angularjs는 그것을 지울만큼 똑똑합니다.

나는 블루 핀이 어디에서 디폴트로 일어나지 않고 접두사를 제거하기위한 응답을 가로 채고/처리 할 수 ​​있는지 궁금해하고 json 구문 분석 오류가 발생합니다.

모든 응용 프로그램/json 유형에 대한 응답을 처리하는 MappingJacksonHttpMessageConverter 클래스가있는 스프링 mvc 응용 프로그램이 있으며 가능한 한 특정 요청을 비활성화 할 수 없습니다.

미리 감사드립니다.

답변

0

같은 문제가있는 다른 사용자는 Spring MVC 파일 업로드 컨트롤러 클래스 메서드에 "NoJsonPrefix"라는 응답 헤더를 추가하여이 문제를 해결했습니다. 그런 다음 Spring MappingJacksonHttpMessageConverter를 확장하고 NoJsonPrefix의 응답 헤더를 확인합니다. 존재하는 경우, json 응답은 접두사가 붙지 않습니다. 이것은 json 응답이 접두사가되어서는 안되는 이상한 경우에 잘 동작합니다.

HttpHeaders responseHeaders = new HttpHeaders(); 
responseHeaders.set("NoJsonPrefix", "true"); 
return new ResponseEntity<Map<String, Object>>(generateResponse(documentDto), responseHeaders, HttpStatus.OK); 

public class PrefixedMappingJacksonHttpMessageConverter extends MappingJacksonHttpMessageConverter { 

@Value("${http.response.json.prefix}") 
private boolean prefixJson; 

@Override 
protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { 
    JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType()); 
    JsonGenerator jsonGenerator = getObjectMapper().getJsonFactory().createJsonGenerator(outputMessage.getBody(), encoding); 

    if (getObjectMapper().getSerializationConfig().isEnabled(SerializationConfig.Feature.INDENT_OUTPUT)) { 
     jsonGenerator.useDefaultPrettyPrinter(); 
    } 

    String noJsonPrefix = outputMessage.getHeaders().getFirst("NoJsonPrefix"); 
    try { 
     if (this.prefixJson && noJsonPrefix == null) { 
      jsonGenerator.writeRaw(")]}',\n"); 
     } 
     getObjectMapper().writeValue(jsonGenerator, object); 
    } catch (JsonProcessingException ex) { 
     throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex); 
    } 
} 

}

<mvc:annotation-driven ignoreDefaultModelOnRedirect="true"> 
    <mvc:message-converters> 
     <bean class="com.***.web.security.PrefixedMappingJacksonHttpMessageConverter"> 
      <property name="prefixJson" value="${http.response.json.prefix}" /> 
     </bean> 
     <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
     <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
    </mvc:message-converters> 
</mvc:annotation-driven> 
관련 문제