首页 文章

Node.js请求上传Jersey服务器multipart资源=> Gson stackoverflow

提问于
浏览
0

我有一个node.js客户端使用multipart表单将文件上传到在apache tomcat上运行的基于Java的jersey服务器 .

这是node.js上传表单:

var filePath = path.join(os.tmpDir(), filename);
var fstream = fs.createWriteStream(filePath);
file.pipe(fstream);

fstream.on('close', function() {
    var formData = {
        custom_file: {
            value:  fs.createReadStream(filePath),
            options: {
                filename: filename
            }
        }
    };

    request.post({
        url: apiBase + reqUrl,
        headers: options.headers,
        formData: formData
    }, function (err, resp, body) {
        if (err) {
            res.status(500).send('Error');
        } else {
            res.status(200).send(body);
        }
    });
});

这是泽西服务器多部分资源实现:

@POST
@Path("/upload")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(@FormDataParam("custom_file") InputStream inputStream,
        @FormDataParam("custom_file") FormDataContentDisposition fileDetail)      {
            return null;
        }

我还在web.xml中添加了jersey的multipart功能支持:

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>

当我使用这个流时,我的java服务器返回以下异常:

SEVERE: Servlet.service() for servlet [springDispatcher] in context with path [/app] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:95)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl.<init>($Gson$Types.java:453)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:99)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)

我错过了什么?我跟着request's step by step file upload using form以及mykong's jersey multipart support .

1 回答

  • 1

    您应该在配置中寻找使用GSON软件包的地方,根据我的经验,软件包不稳定,说得最少而且速度慢 .

    尝试将其更改为其中一个更好的“ Jackson ”,例如,它可能会解决您的问题 .

相关问题