当前位置: 首页 > 知识库问答 >
问题:

Jersey FormDataParam失败,400个错误请求

陶刚豪
2023-03-14

当试图将图像上传到我的服务时,我在Jersey和FormDataParam中有一个非常奇怪的行为。我的服务在DropWizard上运行。

接受图像(以及元数据对象)的方法如下所示:

    @POST
    @Path("/photos")
    @Consumes("multipart/form-data")
    fun upload(
        @FormDataParam("photo") fileInputStream: FileInputStream,
        @FormDataParam("metadata") metadata: PhotoMetadataV1RequestModel
    ) {
        // do something
    }
public class JerseyModule extends AbstractModule {

    @Override
    protected void configure() {
        // other stuff

        bind(MultiPartFeature.class).in(Scopes.SINGLETON);
    }

}
    // Jersey
    compile "org.glassfish.jersey.core:jersey-server:$jerseyVersion"
    compile "org.glassfish.jersey.media:jersey-media-multipart:$jerseyVersion"

如果我尝试使用绝对路径上传一个文件,这实际上是有效的!但是,它不工作,我试图上传一个文件使用相对路径。

更重要的是,当服务部署在另一台机器上(上传映像请求来自不同的机器)时,它也不起作用。这很重要,因为我将服务部署到Heroku,我需要从其他地方上传图像!

这就是工作原理(照片的绝对路径):

curl --location --request POST "http://localhost:8095/rest/v1/self/photos" \
--header "Authorization: Bearer GaKC8xQju5h" \
--form 'photo=/Users/whizzil/Desktop/nova_scripts/create_users/user-lina/photos-webp/photo-profile-1.webp' \
--form 'metadata={"photoType": "PROFILE", "position": 2};type=application/json' 

但是,如果服务器的url不是localhost而是Heroku服务器,即使这样也不起作用。

curl --location --request POST "http://localhost:8095/rest/v1/self/photos" \
--header "Authorization: Bearer GaKC8xQju5h" \
--form 'photo=@./photo-profile-1.webp' \
--form 'metadata={"photoType": "PROFILE", "position": 2};type=application/json'
org.glassfish.jersey.internal.inject.ExtractorException: org.glassfish.jersey.internal.inject.ExtractorException: java.io.FileNotFoundException: Invalid file path
org.glassfish.jersey.media.multipart.FormDataParamException: HTTP 400 Bad Request
    at org.glassfish.jersey.media.multipart.internal.FormDataParamValueFactoryProvider$FormDataParamValueFactory.provide(FormDataParamValueFactoryProvider.java:352)
    at org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.provide(ParamValueFactoryWithSource.java:71)
    at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:90)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:127)

共有1个答案

凌博实
2023-03-14

FileInputStream更改为InputStream解决了这个问题。但我不知道为什么。

 类似资料:
  • 我使用请求编写了一个简单的API调用,执行调用时出现错误400。谁能告诉我哪里出了问题?谢谢你的帮助。这是我写的代码-

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我已经把swagger融入了我的春装项目中。所有swaggerendpoint都工作正常,但< code >/product/swagger-ui . html 给出400错误。 在我的application.properties文件中,我使用了< code > server . context path =/product 。 在我的控制器中,我有以下映射,我认为这些映射导致了错误。 产品控制者

  • 我正在尝试登录一个网站(https://dashboard.ngrok.com/user/login)使用jsoup。我对GET请求没有任何问题,但当我尝试使用凭证执行POST请求时,我收到: HTTP错误获取URL。状态=400 我尝试为请求设置一个更好的头,使用我在连接发出POST请求时发送的相同参数。 我也尝试过这种类型的请求: 结果显示: 线程“main”组织中出现异常。jsoup。Htt

  • 我有这个代码,我用它从电子表格创建PDF,我修改了它,在另一个电子表格中使用,现在我得到这个错误。 异常:https://docs.google.com 返回代码 400 的请求失败。截断的服务器响应: 完整的错误似乎是: .goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html