java – 带文件输入流和json体的webservice?

我想用cxf实现一个web服务来上传一个文件,其中包含正文中包含的一些信息.

我做了什么,但还没有工作:

 @POST
 @Path("/")
 @Consumes(MediaType.MULTIPART_FORM_DATA)
 User addDocument(
     @Multipart(value="metadata", type="application/json") DocMeta metadata,
     @Multipart(value="inputstream", type="multipart/form-data") InputStream inputStream)
     throws ObjectAlreadyExistsException;

当我尝试使用curl请求我的服务时,它不起作用:

curl  http://localhost:9090/... 
      --X POST  
      -H"Content-Type:multipart/form-data" 
      -F inputstream=@myFile.txt 
      -d'{"info1":"info1","info2":"info2"}'

是否真的可以同时拥有多部分数据和带有cxf的json体?

谢谢你提前

马努

解决方法:

是的,这是可能的.但问题出在你的cURL请求上.您应该将所有部件添加为–form / -F.您正尝试将JSON作为正常身体发送.试图用cURL得到错误,它甚至不会发出请求.您还需要为每个部件设置Content-Type.例如

C:\>curl -v -H "Content-Type:multipart/form-data" 
            -H "Accept:application/json" 
            -F "stream=@android.png;type=application/octet-stream" 
            -F "person={\"name\":\"peeskillet\"};type=application/json"
            -X POST http://localhost:8080/rest/multipart`

(当然一切都在一行).这是我用来测试的资源方法.

public static class Person {
    public String name;
}

@POST
@Produces(MediaType.APPLICATION_JSON)
public Response postMultiPart(
    @Multipart(value="stream", type="application/octet-stream") InputStream img,
    @Multipart(value="person", type="application/json") Person person) throws Exception {

    Image image = ImageIO.read(img);
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.add(new JLabel(new ImageIcon(image)));
    frame.setVisible(true);

    return Response.ok(person).build();
}

这是我作为文件发送的图像.

或者,您可以获得一个附件,它将为您提供有关该文件的更多信息.

public Response postMultiPart(
    @Multipart(value="stream") Attachment img,
    @Multipart(value="person", type="application/json") Person person) throws Exception {

    Image image = ImageIO.read(img.getObject(InputStream.class));

>有关CXF支持的更多信息,请参阅Multipart Support

上一篇:java – 使用Spring配置CXF以使用MOXY进行XML编组/解组


下一篇:Caused by: java.lang.NoSuchMethodException: com.cxf.service...