我有一个方法;
@POST
@Path("test")
@Consumes(MediaType.APPLICATION_JSON)
public void test(ObjectOne objectOne, ObjectTwo objectTwo)
Run Code Online (Sandbox Code Playgroud)
现在我知道我可以用json格式发布一个对象,只需将它放入体内即可.但是可以做多个对象吗?如果是这样,怎么样?
我看过很多以类似的东西开头的泽西教程
@ApplicationPath("services")
public class JerseyApplication extends ResourceConfig {
public JerseyApplication() {
packages("com.abc.jersey.services");
}
}
Run Code Online (Sandbox Code Playgroud)
没有解释这个ResourceConfig
类究竟是什么.那么我在哪里可以找到它的文档,用法等?谷歌搜索"泽西资源配置"不会产生任何官方文档.
关于这个课程及其用法的一些问题是:
ResourceConfig
?ResourceConfig
某个地方的子类以便可以找到它或者它是否被泽西自动检测到?ResourceConfig
?ResourceConfig
是和web.xml
文件一样吗?如果是这样的话,如果我在我的项目中同时出现这种情 其中一个优先于另一个吗?我正在使用基于Jersey的restful Service实施策略来构建将用于上传文件的服务.我的服务类名是:UploadFileService.java(参见下面的代码)
package com.jerser.service;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;
@Path("/fileUpload")
public class UploadFileService {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName();
// save it
writeToFile(uploadedInputStream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
// save uploaded file to new location
private void writeToFile(InputStream …
Run Code Online (Sandbox Code Playgroud) 我正在使用Jersey客户端进行基于http的请求.如果文件很小但是当我发布大小为700M的文件时遇到错误,它会很好用:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
at com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:90)
at com.sun.jersey.core.util.ReaderWriter.writeTo(ReaderWriter.java:115)
at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeTo(AbstractMessageReaderWriterProvider.java:76)
at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo(FileProvider.java:103)
at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo(FileProvider.java:64)
at com.sun.jersey.multipart.impl.MultiPartWriter.writeTo(MultiPartWriter.java:224)
at com.sun.jersey.multipart.impl.MultiPartWriter.writeTo(MultiPartWriter.java:71)
at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:300)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:204)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147)
at com.sun.jersey.api.client.Client.handle(Client.java:648)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:568)
at TestHttpRequest.main(TestHttpRequest.java:42)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
ClientConfig cc = new DefaultClientConfig();
Client client = Client.create(cc);
WebResource resource = client.resource("http://localhost:8080/JerseyWithServletTest/helloworld");
FormDataMultiPart form = new FormDataMultiPart();
File file = new File("E:/CN_WXPPSP3_v312.ISO");
form.field("username", "ljy");
form.field("password", "password");
form.field("filename", file.getName());
form.bodyPart(new FileDataBodyPart("file", file, MediaType.MULTIPART_FORM_DATA_TYPE));
ClientResponse …
Run Code Online (Sandbox Code Playgroud) 我正在Web应用程序中实现文件上传.
前端用angularJS编写,并使用angular-file-upload包(可在此链接中找到的包https://github.com/nervgh/angular-file-upload).
后端是Java/Jersey Web Services.
上传的文件包含一个WebKitFormBoundary页眉和页脚,如下所示:
------WebKitFormBoundarylqskdjlqksdjl
Content-Disposition: form-data; name="upload"; filename="foo.bar"
Content-Type: multipart/form-data
Run Code Online (Sandbox Code Playgroud)
因此,我不确定我是上传文件还是请求.当然,我的后端应用程序认为上传的文件已损坏,除非删除这些行(现在手动),否则不会显示它们.
底线是:如何在上传的文件中删除页眉和页脚?
以下是一些代码示例.
再次:angularJS angular-file-upload
item.headers = {
'Content-Disposition': 'attachment; filename="' + item.file.name + '"',
'Content-Type': 'multipart/form-data'
};
Run Code Online (Sandbox Code Playgroud)
和Java/Jersey
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("someurl/{fileName}")
public Artifact uploadArtifact(InputStream uploadedStream, @PathParam("fileName") String fileName) throws Exception;
Run Code Online (Sandbox Code Playgroud)
我想知道Content-Disposition: attachment
我的angularJS部分是否可能会弄乱它?
它应该是Content-Disposition: form-data
吗?
Thx提前!
我知道如何创建使用MediaType.MULTIPART_FORM_DATA
和处理文件的端点@FormDataParam("file") FormDataBodyPart bodyPart
,但我想知道我是否也可以在该请求中拥有JSON数据?就像是:
@POST
@Path("somepath")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFileAndJSON(@RequestBody SomeModel someModel,
@FormDataParam("file") FormDataBodyPart bodyPart) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
目前,如果我在以下邮递员请求的"原始"选项卡上添加一些JSON数据,我HTTP 415 Unsupported Media Type
可能因为我指定我消费MULTIPART_FORM_DATA
但我也在使用@RequestBody
哪个正在寻找JSON内容APPLICATION_JSON
.那么如何在同一个请求中处理JSON数据和文件呢?我知道可以在两个请求中执行此操作,如果可能,我只想在一个请求中执行此操作?
我有一个Jersey REST服务,将向其发布数据.将有一个CSV文件,它是该CSV的实际数据和一些元数据(元素可以是JSON或XML格式).如果需要发布这两个方法,那么方法签名和附加注释应该如何发布呢?
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON})
public CreateTaskVO provideService(@FormParam("meta") String v1,
@FormParam("data") InputStream v2) {
Run Code Online (Sandbox Code Playgroud)
在这里,我设想第一个参数是元数据的JSON字符串,第二个参数是实际数据的输入流.这会有用吗?
我正在使用Spring Boot v1.5.10 + Jersey v2.25.1,将jersey配置为过滤器来访问静态文件夹文件。我收到HTTP响应400错误的服务消耗请求MULTIPART_FORM_DATA
。
提议将Jersey配置为过滤器。
spring.jersey.type=filter
Run Code Online (Sandbox Code Playgroud)
如果我删除了上述属性,即使用Jersey作为Servlet,则该服务正在运行,但无法访问静态文件夹。
这是控制器,
@POST
@Path("/save")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public ResponseBean save(
@FormDataParam("fileToUpload") InputStream file,
@FormDataParam("fileToUpload") FormDataContentDisposition fileDisposition,
@FormDataParam("fromData") FormDataDto data) {
// stuff
}
Run Code Online (Sandbox Code Playgroud)
编辑:
GitHub链接https://github.com/sundarabalajijk/boot-jersey
启动应用程序时, spring.jersey.type=filter
http:// localhost:8080 / hello.html(有效)
http:// localhost:8080 / save(不起作用)-使用的邮递员。
什么时候 spring.jersey.type=servlet
http:// localhost:8080 / hello.html(无效)
我正在尝试使用 jquery ajax 发送附加到 FormData 的文件。在参考了一些 mozilla 和 IBM 的文档后,我想出了以下内容。
阿贾克斯代码:
var sessionId = $.cookie("referenceId");
var myFormData = { sessionId: sessionId,
cipherData: cipherData, // Encrypted xml data
payslip: document.getElementById('payslip').files[0]};
var formData = new FormData();
for (var key in myFormData) {
console.log(key, myFormData[key]);
formData.append(key, myFormData[key]);
}
$.ajax({
url : 'api/rootpath/childpath',
type : 'POST',
processData: false,
contentType: false, // Here the contentType is set to false, so what should I put at @Consumes in java code
data : {
formData: formData
}, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Jersey + Jackson编写一个休息服务来上传文件以及其他一些文件信息.
使用multipart,文件正确上传,简单字段也可以,但是应该包含其他数据的POJO始终为null.
简化示例
POJO:
public class Test {
public String name;
public Test() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
应用:
@ApplicationPath("myapp")
public class JerseyApp extends ResourceConfig {
public JerseyApp() {
register(MultiPartFeature.class);
register(JacksonFeature.class);
packages("com.test.rest");
// Enable Tracing support.
property(ServerProperties.TRACING, "ALL");
}
}
Run Code Online (Sandbox Code Playgroud)
服务:
@Path("file")
public class FileRestService {
@POST
@Path("/upload1")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response createFile1(@FormDataParam("doc") Test doc) {
//doc is always null
return Response.ok(doc.getName()).build();
}
@POST
@Path("/upload2")
@Consumes(MediaType.APPLICATION_JSON) …
Run Code Online (Sandbox Code Playgroud) java ×7
jersey ×7
jax-rs ×5
rest ×5
jersey-2.0 ×3
file-upload ×2
json ×2
angularjs ×1
jackson ×1
javabeans ×1
jquery ×1
large-files ×1
multipart ×1
spring ×1
spring-boot ×1