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

时间:2017-09-17 18:41:20

标签: json rest jersey-2.0

我想上传多个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) {

2 个答案:

答案 0 :(得分:3)

在rest 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]);
        }
    });
};

答案 1 :(得分:2)

首先,您应该自己定义entities或技术/简单说(但不完全)tables来存储您的数据。

我认为它会像:

  • 学生 - 桌面存储学生
  • 成绩 - 这里的学生成绩
  • 课程 - 这里将保持课程安排

接下来,REST的想法是单独管理(更新/插入/删除)记录。数据作为原始JSON在特定记录的内容正文中传递。但是,您也可以批量处理多个记录。例如,如果在插入(POST方法)上传递JSON数组而不是对象,这意味着您发送了多个记录,那么您在后端进行多次插入:插入学生将采用类似于:{"name": "John"}的方法,但是插入多个学生将是:[{"name": "John"}, {"name": "Davy"}]

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

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

  • 获取 - 列出整个记录集或个人记录集(/ students / 5 /)
  • POST - 使用正文中的JSON插入新记录
  • PUT - 更新特定记录,通常使用id,如(/ students / 5 /)
  • DELETE - 从记录集中删除记录,通常带有id,如(/ students / 5 /)

GET可以通过过滤功能,分页等进行改进......当然,您应该关注安全性,数据访问/管理控制层。

对于针对单个记录操作(如编辑/删除)的操作,记录标识符可以在URI部分中传递,也可以作为参数或在内容体中传递。你决定了。