使用 Unirest 的 MultipartBody POST 请求

问题描述

当我尝试从客户端(.pdf 文件 + 对象字段,如作者、标题、发布日期)向服务器发送数据时,服务器不会对此做出反应。 我将使用 FileChooser 从目录中获取文件,之后我将从文本框中获取数据并将其设置为 uploadBook 对象。我将像 http://kong.github.io/unirest-java/#requests 的示例一样发送我的数据 但它对我不起作用。

InputStream file = new FileInputStream(new File("/MyFile.zip"));

Unirest.post("http://httpbin.org")
       .field("upload",file,"MyFile.zip")
       .asEmpty();

客户端部分

控制器

loadBookButton.setonAction(
    actionEvent -> {
      FileChooser.ExtensionFilter extFilter =
          new FileChooser.ExtensionFilter("PDF files (*.pdf)","*.pdf");
      fileChooser.getExtensionFilters().add(extFilter);

      fileChooser.setTitle("Download book");
      choosedFile = fileChooser.showOpenDialog(stage);
    });

    MultipartBody bookLoadResult;
      uploadedBook.setAuthor(tbAuthor.getText());
      uploadedBook.setTitle(tbTitle.getText());
      uploadedBook.setPublish_date(tbPublishDate.getText());

      try {
           file = new FileInputStream(new File(choosedFile.getAbsolutePath()));
      } catch (FileNotFoundException e) {
          e.printstacktrace();
      }

      bookLoadResult =
        Unirest.post("http://localhost:8080/bookshelf/add")
            .header("accept","application/json")
            .field("author",uploadedBook.getAuthor())
            .field("title",uploadedBook.getTitle())
            .field("publish_date",uploadedBook.getPublish_date())
            .field("file_data",choosedFile.getName());

上传的图书实体

package org.openjfx.DB.Entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Type;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UploadedBook {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

  private String author;
  private String title;
  private String publish_date;
  @Lob
  @Type(type = "org.hibernate.type.TextType")
  private byte[] file_data;
}

服务器部分

控制器

@Slf4j
@RestController
@RequestMapping("bookshelf")
public class BookshelfController {
  @Autowired private BookshelfService bookshelfService;

  @RequestMapping(
      value = "/add",method = RequestMethod.POST,consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
  public void savingBook(UploadedBookDTO uploadedBookDTO) {
    log.info("[BookshelfController.savingBook] uploadedBookDTO = {}",uploadedBookDTO);
    bookshelfService.savingBook(uploadedBookDTO);
  }
  ;

  @RequestMapping(
          value = "/books",method = RequestMethod.GET,consumes = MediaType.ALL_VALUE)
  public List countOfBooks() {

    List<UploadedBook> booksList = new ArrayList<UploadedBook>();
    booksList = bookshelfService.countOfBooks();
    return booksList;
  }
  ;

}

上传的BookDTO

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UploadedBookDTO {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

  @NotNull @NotBlank public String author;
  @NotNull @NotBlank public String title;
  @NotNull @NotBlank public String publish_date;


  @NotNull
  @NotBlank
  @Type(type = "org.hibernate.type.TextType")
  @Lob public Blob file_data;

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...