我想上传多个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) {
答案 0 :(得分:3)
@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();
}
}
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样式功能:
GET可以通过过滤功能,分页等进行改进......当然,您应该关注安全性,数据访问/管理控制层。
对于针对单个记录操作(如编辑/删除)的操作,记录标识符可以在URI部分中传递,也可以作为参数或在内容体中传递。你决定了。