如何将多个 json 文件和表单数据上传到 rest 服务

How to upload multiple json files and form data to rest service

我想上传多个 JSON 文件(如学生成绩 JSON、学生课程安排 JSON、学生作业 JSON 等)和元数据(如学生信息)
在 Jersy 和 tomcat

休息 运行

这里采取的方法是什么?它应该像一个控制器吗?是否可以指定上传的 JSOn 结构? 如果其中一个文件丢失怎么办?

@Path("/submitStudentInformation")
public class SubmitStudInfoController {
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces("text/plain")
    @Path("/multipleFiles")
public Response uploadFiles(@Context HttpServletRequest request) {

发送静态文件列表api

@POST
@Path("/uploadFile") 
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadFile(@FormDataParam("files") List<FormDataBodyPart> files)
 if(files!=null) {
     for (int i = 0; i < files.size(); i++) {
          FormDataBodyPart this_formDataBodyPartFile = files.get(i);
          ContentDisposition this_contentDispositionHeader = this_formDataBodyPartFile.getContentDisposition();
          InputStream this_fileInputStream = this_formDataBodyPartFile.getValueAs(InputStream.class);
          FormDataContentDisposition fileDetail = (FormDataContentDisposition) this_contentDispositionHeader;
          String imagename = fileDetail.getFileName();
     }
} 

我正在使用前端 angularjs 所以我在 formdata

中设置了多个文件
var formdata = new FormData();
$scope.getTheFiles = function(element) {
    $scope.$apply(function($scope) {
        $scope.files = element.files;
        for (var i = 0; i < element.files.length; i++) {
            formdata.append('files', element.files[i]);
        }
    });
};

首先,您应该自己定义 entities 或 technically/simple 所说的(但不完全是)tables 来存储您的数据。

我假设它会是这样的:

  • 学生 - table 存储学生
  • 成绩 - 此处为学生成绩
  • 课程-此处将保留课程时间表

接下来,REST 的想法是记录是单独管理的 (updated/inserted/deleted)。数据在特定记录的内容正文中作为原始 JSON 传递。但是,您也可以批量处理多个记录。例如,如果在插入(POST 方法)时你传递了一个 JSON 数组,而不是一个对象,这意味着你发送了多条记录,那么你在后端进行了多次插入:插入一个学生将需要一些东西像:{"name": "John"},但是插入多个学生会是这样的:[{"name": "John"}, {"name": "Davy"}]

通常,在 REST 中您不必上传 JSON 文件本身,您 将数据作为 JSON 传递给服务。如果您真的需要将 JSON 中的数据作为文件上传,请三思。然而,这在技术上是可行的。在文件上传的情况下,您需要以表单编码的方式传递数据,而不是原始的,作为经典的 REST 方法。

稍后为每个实体定义一个 URI,例如对于学生来说,它将类似于 /api/students/[id/] 具有基于 HTTP 方法的 REST 样式功能:

  • GET - 列出整个记录集或单个记录集 (/students/5/)
  • POST - 从 body
  • 中插入一条带有 JSON 的新记录
  • PUT - 更新特定记录,通常带有id,如(/students/5/)
  • DELETE - 从记录集中删除一条记录,通常带有id,如(/students/5/)

GET 可以通过过滤功能、分页等进行改进...当然,您应该关心安全性、数据 access/manage 控制层。

对于像edit/delete这样的针对单条记录的操作,记录标识符可以在URI部分或作为参数或在内容主体中传递。你来决定。