首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blueimp文件上传angularjs json前缀

Blueimp文件上传angularjs json前缀
EN

Stack Overflow用户
提问于 2014-10-21 13:53:40
回答 1查看 209关注 0票数 0

我使用的是blueimp文件上传angularjs版本,并且已经基本正常工作了。我遇到的唯一问题是对json响应的解析。

正如angularjs团队建议的那样-- https://docs.angularjs.org/api/ng/service/$http --所有应用程序/json类型的服务器响应都以")]}',\n“作为前缀,并且angularjs足够智能,可以剥离它。

我想知道在blueimp中,我可以在哪里拦截/预处理响应,以剥离前缀,因为它在默认情况下不会发生,并会导致json解析错误。

我有一个带有MappingJacksonHttpMessageConverter类的spring mvc应用程序,它处理所有应用程序/json类型的响应,并且据我所知不能对特定的请求禁用。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-10-22 16:10:41

对于任何其他有同样问题的人,我通过在我的Spring MVC文件上传控制器类方法中添加一个名为"NoJsonPrefix“的响应头来解决这个问题。然后我扩展Spring MappingJacksonHttpMessageConverter并检查NoJsonPrefix的响应头。如果存在,则不为json响应添加前缀。对于json响应不应该作为前缀的奇怪情况,这很好地工作。

代码语言:javascript
复制
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);
    }
}

}

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26479762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档