编程语言
首页 > 编程语言> > java-如何使用RestEasy框架发送Multipart响应

java-如何使用RestEasy框架发送Multipart响应

作者:互联网

我正在尝试实现一个接受json字符串并基于密钥获取.zip文件的Web服务.

然后,我需要发送.zip文件和捆绑在多部分数据中的json字符串.

所以基本上我的响应应该是一个包含两部分的多部分对象

1) .zip file
2) json string

这是我当前的代码

public class ContentRepo {



@POST
@Path("/fetchModel")
@Consumes("application/json")
@Produces("multipart/mixed")
public Response getContent(String strJson)
{
    Response response = null;
    try{
        JSONObject objJson = new JSONObject(strJson);
        String strAssetName = objJson.getString("assetName");
        if(null != strAssetName){
            Client client = ClientBuilder.newClient();
            ResteasyClient restEasyClient = (ResteasyClient) client;
            ResteasyWebTarget target = restEasyClient.target("http://localhost:8091/ContentServer/").path("fetchModel");
            response = target.request()
                    .post(Entity.entity(getMultiPartData("Car"), MediaType.MULTIPART_FORM_DATA));
        }
    }catch(Exception ex){
        ex.printStackTrace();
    }

    return response;
}

public MultipartFormDataOutput getMultiPartData(String strAssetName){

    MultipartFormDataOutput objMultiPartData = new MultipartFormDataOutput();
    JSONObject objJson = new JSONObject();

    try{
         if(strAssetName.equalsIgnoreCase("Car")){
            //car assets
            try {
                objMultiPartData.addFormData("file", new FileBody(new File("D:/programs/content_server/Car/Car.zip")), MediaType.APPLICATION_OCTET_STREAM_TYPE);
                objJson.put("png", "car");  
                objMultiPartData.addFormData("mapping", new StringBody(objJson.toString()), MediaType.APPLICATION_JSON_TYPE);
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }catch(Exception ex){
        ex.printStackTrace();
    }

    return objMultiPartData;
}

}

但是,当运行上述命令时,我无法提取多部分响应.而是获取以下异常

Caused by: java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.<init>(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)V
at org.jboss.resteasy.client.jaxrs.internal.ClientConfiguration.<init>(ClientConfiguration.java:44)
at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:347)
at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:52)
at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.java:114)
at com.app.wikicontent.WikitudeContentRepo.getARModel(WikitudeContentRepo.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:155)
at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257)
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222)
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211)
at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525)
... 25 more

解决方法:

您的堆栈跟踪抱怨说,为了支持org.jboss.resteasy:resteasy-client,直到org.jboss.resteasy:resteasy-jaxrs版本3.0才找不到不是introduced的ResteasyProvider constructor,因此您可能在运行时类路径上的某个位置有一个较老版本的resteasy-jaxrs.删除它,并确保已部署的应用程序具有同步的resteasy-jaxrs版本和resteasy-client版本.

标签:resteasy,json,java
来源: https://codeday.me/bug/20191027/1942365.html