使用APPLICATION_OCTET_STREAM的Spring Boot 406错误

时间:2018-11-18 08:04:57

标签: spring spring-boot

我的代码

@RestController
@RequestMapping("/rest/v1/files")
public class FileController {
    @Autowired
    FileService fileService;

    @GetMapping(value="/{id}")
    ResponseEntity<InputStreamResource> downloadFile(@PathVariable Integer id, HttpServletRequest request) throws IOException {
        FileInfo file = fileService.getFile(id);

        String dispositionPrefix = "attachment; filename=";
        String encodedFilename = file.getOrgName();
        Path filePath = Paths.get(file.getPath(), file.getName());
        InputStreamResource resource = new InputStreamResource(Files.newInputStream(filePath, StandardOpenOption.READ));

        return ResponseEntity.ok()
                .contentLength(Files.size(filePath))
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .header(HttpHeaders.CONTENT_DISPOSITION, dispositionPrefix + encodedFilename)
                .body(resource);
    }
}

然后我得到org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

我用MediaType.APPLICATION_OCTET_STREAM设置了内容类型。但是我不知道出了什么问题...

我试图下载JPG之类的*************.jpg个文件,例如1542293055613.jpg

2 个答案:

答案 0 :(得分:0)

此发布的代码正确无误。我没有错误地运行它。

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

当请求处理程序无法生成客户端可接受的响应时,抛出此异常。

请检查客户的请求。

答案 1 :(得分:0)

我的春季项目没有适当的HttpMessageConverter。我刚刚添加了ResourceHttpMessageConverter,就可以了。

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new ResourceHttpMessageConverter(true));
    }

}