相关疑难解决方法(0)

JAX-RS发布多个对象

我有一个方法;

@POST
@Path("test")
@Consumes(MediaType.APPLICATION_JSON)
public void test(ObjectOne objectOne, ObjectTwo objectTwo)
Run Code Online (Sandbox Code Playgroud)

现在我知道我可以用json格式发布一个对象,只需将它放入体内即可.但是可以做多个对象吗?如果是这样,怎么样?

java rest jax-rs

74
推荐指数
4
解决办法
7万
查看次数

Jersey 2中的ResourceConfig类究竟是什么?

我看过很多以类似的东西开头的泽西教程

@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文件一样吗?如果是这样的话,如果我在我的项目中同时出现这种情 其中一个优先于另一个吗?

jax-rs jersey jersey-2.0

53
推荐指数
1
解决办法
3万
查看次数

MULTIPART_FORM_DATA:找不到类型为public javax.ws.rs.core.Response的参数的注入源

我正在使用基于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)

java rest multipartform-data jersey jersey-2.0

43
推荐指数
3
解决办法
5万
查看次数

使用Jersey客户端上传大文件时如何避免OutOfMemoryError

我正在使用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)

file-upload jersey large-files

17
推荐指数
3
解决办法
4万
查看次数

如何摆脱上传文件中的WebKitFormBoundary

我正在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提前!

java multipartform-data jersey angularjs

11
推荐指数
1
解决办法
6188
查看次数

Spring:JSON数据和文件在同一个请求中

我知道如何创建使用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数据和文件呢?我知道可以在两个请求中执行此操作,如果可能,我只想在一个请求中执行此操作?

在此输入图像描述

java rest spring json multipartform-data

9
推荐指数
1
解决办法
8127
查看次数

Java Rest Jersey:发布多种类型的数据(文件和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字符串,第二个参数是实际数据的输入流.这会有用吗?

java rest json jax-rs jersey

5
推荐指数
1
解决办法
2万
查看次数

Spring Boot + Jersey类型过滤器-对服务的错误请求400消耗MULTIPART_FORM_DATA

我正在使用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 /(有效)

http:// localhost:8080 / hello.html(有效)

http:// localhost:8080 / save(不起作用)-使用的邮递员。

什么时候 spring.jersey.type=servlet

http:// localhost:8080 /(有效)

http:// localhost:8080 / hello.html(无效)

http:// localhost:8080 / save(有效)

邮递员要求

file-upload jax-rs servlet-filters jersey-2.0 spring-boot

4
推荐指数
1
解决办法
995
查看次数

415 尝试在 Jax-RS 球衣中发送 FormData() 时的状态

我正在尝试使用 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)

java rest jquery jax-rs jersey

3
推荐指数
1
解决办法
3910
查看次数

jersey 2 multipart pojo始终为null

我正在尝试使用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 multipart jersey javabeans jackson

1
推荐指数
1
解决办法
1564
查看次数