我使用的是blueimp文件上传angularjs版本,并且已经基本正常工作了。我遇到的唯一问题是对json响应的解析。
正如angularjs团队建议的那样-- https://docs.angularjs.org/api/ng/service/$http --所有应用程序/json类型的服务器响应都以")]}',\n“作为前缀,并且angularjs足够智能,可以剥离它。
我想知道在blueimp中,我可以在哪里拦截/预处理响应,以剥离前缀,因为它在默认情况下不会发生,并会导致json解析错误。
我有一个带有MappingJacksonHttpMessageConverter类的spring mvc应用程序,它处理所有应用程序/json类型的响应,并且据我所知不能对特定的请求禁用。
提前谢谢。
发布于 2014-10-22 16:10:41
对于任何其他有同样问题的人,我通过在我的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>https://stackoverflow.com/questions/26479762
复制相似问题