外部服务的Creation API。发送二进制数据

时间:2016-08-30 10:58:24

标签: java json web-services rest jax-rs

外部服务不是我的,它是“Freshdesk”。

我设法用Java-ws-rs创建一个Java-API,以便能够调用它的WS来创建一个“Ticket”。

这是我的界面:

@Path("/api/v2/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface FreshdeskService {

  @POST
  @Path("tickets")
  TicketResponse create(TicketRequest ticketRequests);

}

在这里我的对象(我删除了很多字段,因为这里没有必要):

public class TicketRequest {
  private String name;
  private Long requester_id;
  private String email;
}

一切都很好,可以创建票证。我的问题是当我尝试为此故障单添加附件时。以下是文档:http://developers.freshdesk.com/api/#create_ticket

curl命令是:

curl -v -u user@yourcompany.com:test -F "attachments[]=@/path/to/attachment1.ext" -F "attachments[]=@/path/to/attachment2.ext" -F "email=example@example.com" -F "subject=Ticket Title" -F "description=this is a sample ticket" -X POST 'https://domain.freshdesk.com/api/v2/tickets'

如您所见,他们将数据转换为-F的表单。但我不知道如何使用我的API来做到这一点。我可以在List<File>对象中添加TicketRequest,但它不起作用。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

Freshdesk文档说明了如何创建带附件的票证:

  

此API请求的内容类型必须设置为multipart/form-data

因此,您无法使用JSON创建带附件的票证。

根据您使用的JAX-RS实现,有不同的方式来发送/接收文件。

如果您使用的是Jersey 2.x,则需要添加multipart依赖项并注册multipart功能以处理多部分请求。有关如何执行此操作的详细信息,请查看this answer。您可以使用FormDataMultiPart从客户端上传文件。