HttpMediaTypeNotAcceptableException:找不到可接受的表示spring mvc

时间:2015-03-03 14:46:55

标签: spring-mvc

这让我抓狂!我正在尝试提供JPG图像。我确信这种方法前几天工作正常,所以我不知道发生了什么变化。我尝试了很多不同的东西让它起作用,但我似乎无法超越异常。

基本上我正在尝试从数据库中提供图像。

我想也许实际的字节已损坏所以我把它们写到文件中,然后检查文件内容。就在Mac上的Finder中,临时目录中的文件在预览应用程序中看起来很好,所以我很确定这不是导致问题的内容本身。

这是控制器方法:

@RequestMapping(value="/binaries/**", method = RequestMethod.GET, produces={MediaType.APPLICATION_JSON_VALUE, MediaType.IMAGE_GIF_VALUE,
            MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE, "application/javascript"})
    public @ResponseBody
    ResponseEntity<byte[]> serveResource(WebRequest webRequest, HttpServletResponse response, String uri) throws IOException {
        String path = (String)request.getAttribute( HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE );

        BinaryFile bf = binaryService.findByUri(path);
        String tmpdir = System.getProperty("java.io.tmpdir");
        File dest = new File(tmpdir + File.separator + bf.getFileName());
        FileUtils.writeByteArrayToFile(dest, bf.getResource());
        logger.debug("file written: " + dest.getAbsolutePath());
//        response.addHeader("Cache-Control", "public, max-age=3600");

        if (webRequest.checkNotModified(bf.getLastModifiedDate().toDate().getTime()))
        {
            return null;
        };
        return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(bf.getResource());
    }

这是一个例外:

Request: http://localhost:8080/binaries/products/shortcode_1/test_image2.jpg raised org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

有人有什么想法吗?这是春季4.1.4.RELEASE

1 个答案:

答案 0 :(得分:2)

哦,没关系,我想出了改变了什么。我已经覆盖了MessageConverters,因为我正在研究一些Jackson的东西,所以解决方法是我需要手动添加ByteArrayHttpMessageConverter。

@Bean
    public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter(){
        ByteArrayHttpMessageConverter bam = new ByteArrayHttpMessageConverter();
        List<org.springframework.http.MediaType> mediaTypes = new LinkedList<org.springframework.http.MediaType>();
        mediaTypes.add(org.springframework.http.MediaType.APPLICATION_JSON);
        mediaTypes.add(org.springframework.http.MediaType.IMAGE_JPEG);
        mediaTypes.add(org.springframework.http.MediaType.IMAGE_PNG);
        mediaTypes.add(org.springframework.http.MediaType.IMAGE_GIF);
        mediaTypes.add(org.springframework.http.MediaType.TEXT_PLAIN);
        bam.setSupportedMediaTypes(mediaTypes);
        return bam;
    }

 @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

        MappingJackson2HttpMessageConverter mapper = new MappingJackson2HttpMessageConverter();
        ObjectMapper om = new ObjectMapper();
        om.registerModule(new JodaModule());
        om.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.setObjectMapper(om);
        converters.add(mapper);

        converters.add(byteArrayHttpMessageConverter());

        super.configureMessageConverters(converters);
    }