java - byte[] 作为 Rest Web 服务的输入

标签 java rest web service

遇到以下问题。我似乎无法将从文件创建的 byte[] 传递到 Web 服务中。当我执行客户端代码时,服务器日志抛出 pdfFile byte[] 的空指针。请在这里提供帮助。

服务器端:

@RequestMapping(value = "/uploadForMarkPDF", method = RequestMethod.POST, consumes = { "application/octet-stream" })
    public ResponseEntity<byte[]> pdfMark(@RequestParam(value = "pdfFile", required = false)  byte[] pdfFile) {

        try {

            log.info("inside pdf Mark");

            log.info("passed in file size:"+pdfFile.length);
.
.
.

客户端:

CloseableHttpClient httpclient = null;
        byte[] data = null;
        final String uri = "http://localhost:8080/legacyRest/uploadForMarkPDF";

        File pdfFile = new File("C:\\watermarktest\\form.pdf");

        Path fileLocation = Paths.get("C:\\watermarktest\\form.pdf");

        HttpPost post = new HttpPost(uri);
        post.addHeader("Content-Type", "application/octet-stream; boundary=\"---Content Boundary\"");
        try {
            data = Files.readAllBytes(fileLocation);
        } catch (IOException ex) {

        }

        InputStream is = new ByteArrayInputStream(data);

        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();

        multipartEntityBuilder.addBinaryBody("pdfFile", data, ContentType.create("application/octet-stream"),
                "pdfFile");
        multipartEntityBuilder.setBoundary("---Content Boundary");
        httpclient = HttpClientBuilder.create().build();
        HttpEntity entity = multipartEntityBuilder.build();
        post.setEntity(entity);

        try {
            HttpResponse response = httpclient.execute(post);

            System.out.println(response);

            HttpEntity responseEntity = response.getEntity();

            System.out.println(responseEntity);

            InputStream responseStream = responseEntity.getContent();

最佳答案

问题出在客户端和对构建器的误解。

MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); // init builder

multipartEntityBuilder.addBinaryBody("pdfFile", data, ContentType.create("application/octet-stream"),
            "pdfFile");
multipartEntityBuilder.setBoundary("---Content Boundary");
HttpEntity entity = multipartEntityBuilder.build();

这个实现与刚刚做的事情是一样的

HttpEntity entity = MultipartEntityBuilder.create().build();

构建器模式设置一个字段并返回构建器。这将使您能够将构建器链接在一起。但是,如果您不链接构建器,则需要确保保留对构建器的返回对象的引用,因为它们包含您希望填充的字段。

MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder = multipartEntityBuilder.setBoundary("---Content Boundary");

但是,这将是首选方法。

HttpEntity entity = MultiPartEntityBuilder.create().set*(*).set*(*).build()

关于java - byte[] 作为 Rest Web 服务的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557715/

相关文章:

html - 在 Bootstrap 4 中将两列组合成两个不同的行

html - 泰卢固语文本在网页中显示为方框。如何显示原文?

java - 将 JSON 文件中的 JSON 数组解析为 Java ArrayList

java - 矩形面向对象开发——Equals()方法

java - 在计算中使用正则表达式反向引用(Java、Netbeans 以及不仅如此)

java - 是否有类似 javadoc 的工具可以从 JAX-RS 注释生成 RESTful Web 服务 apidoc?

php - 通过 REST 使用 Laravel 上传文件

rest - 连通性和 HATEOAS

android - 用户登录直接从应用程序或从应用程序到 Web 界面写入数据库?

java - 以编程方式使 Java Web 应用程序重新启动时的所有 session 过期