jacksonMessageConverter将mp3文件损坏为八位字节编码响应

时间:2017-06-06 10:34:11

标签: json spring spring-mvc jackson

我有一个带有以下内容的spring MVC配置:

       public class SpringConfiguration extends WebMvcConfigurerAdapter {
        public MappingJackson2HttpMessageConverter jacksonMessageConverter() {
            MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

            ObjectMapper mapper = new ObjectMapper();
            //Registering Hibernate4Module to support lazy objects
            mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            mapper.registerModule(new Hibernate4Module());

            messageConverter.setObjectMapper(mapper);
            return messageConverter;
        }
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //Here we add our custom-configured HttpMessageConverter
        converters.add(jacksonMessageConverter());
        super.configureMessageConverters(converters);
        }
      }

以前的方法用于忽略所有惰性关系而不在模型中添加JsonIgnore 问题是我有一个将mp3文件作为八位字节响应的路由,如下所示

@GetMapping(value = "/audio/{id}")
public ResponseEntity<byte[]> streamMp3FileToAdmin(@PathVariable Integer id) {
    CorporateCampaign camp = corporateCampaignService.findById(id);
    final HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    return new ResponseEntity<byte[]>(Utilities.getFileAsBytes(camp.getVoiceUrl()),httpHeaders,HttpStatus.OK);
}

如果我删除jackson消息转换器,steaming工作正常,但是当我添加jackson消息转换器时,流不再有效

我读了这个问题Spring MVC: How to return image in @ResponseBody?

和很多,但我还没有找到解决方案

1 个答案:

答案 0 :(得分:1)

您需要将produces = MediaType.APPLICATION_OCTET_STREAM添加到@GetMapping(value = "/audio/{id}")以指定生成的结果内容类型,并让浏览器正确识别它。