您好我是Restful网络服务的新手。
我的目标是在一个请求中创建多个用户帐户。
我选择Jersey API来创建一个Web服务。
此WS将创建多个用户的帐户。每个用户帐户都与头像(个人资料图片)相关联。我使用头像发送用户信息(使用Base64编码器将头像文件编码为字符串格式)。
我的问题是,如果请求有多个用户,并且每个用户都与更大的头像大小相关联,那么Restful Web服务是否可以处理这些请求?
Restful webservice中的Request数据大小是否有限?
请建议我在Jersey API中创建更好的网络服务。
答案 0 :(得分:4)
您应该查看Jersey Multipart support - 而不是在邮件正文中传递头像 - 它将允许您将大型文件传输到您的其余服务。另一个好处 - 你不再需要Base64编码了。
答案 1 :(得分:2)
我可以通过表单提交来实现这一点,而不是以JSON格式准备对象。
@Path("/upload")
public class MultipleFiles
{
private static final String FILE_UPLOAD_PATH = "/Users/arun_kumar/Pictures";
private static final String CANDIDATE_NAME = "candidateName";
private static final String SUCCESS_RESPONSE = "Successful";
private static final String FAILED_RESPONSE = "Failed";
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("text/plain")
@Path("/multipleFiles")
public String registerWebService(@Context HttpServletRequest request)
{
String responseStatus = SUCCESS_RESPONSE;
String candidateName = null;
//checks whether there is a file upload request or not
if (ServletFileUpload.isMultipartContent(request))
{
final FileItemFactory factory = new DiskFileItemFactory();
final ServletFileUpload fileUpload = new ServletFileUpload(factory);
try
{
/*
* parseRequest returns a list of FileItem
* but in old (pre-java5) style
*/
final List items = fileUpload.parseRequest(request);
if (items != null)
{
final Iterator iter = items.iterator();
while (iter.hasNext())
{
final FileItem item = (FileItem) iter.next();
final String itemName = item.getName();
final String fieldName = item.getFieldName();
final String fieldValue = item.getString();
if (item.isFormField())
{
candidateName = fieldValue;
System.out.println(" Name: " + fieldName + ", Value: " + fieldValue);
}
else
{
final File savedFile = new File(FILE_UPLOAD_PATH + File.separator
+ itemName);
System.out.println(" Saving the file: " + savedFile.getName());
item.write(savedFile);
}
}
}
}
catch (FileUploadException fue)
{
responseStatus = FAILED_RESPONSE;
fue.printStackTrace();
}
catch (Exception e)
{
responseStatus = FAILED_RESPONSE;
e.printStackTrace();
}
}
System.out.println("Returned Response Status: " + responseStatus);
return responseStatus;
}
}