如何将InputStream传递给REST服务POST方法

时间:2016-10-25 06:12:51

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

如何使用Java REST客户端将InputStream传递给createParcel()方法?如何使用POSTMAN调用POST请求?

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
public int createParcel(InputStream is) {
    int awbNo = 0;
    try {
        ParcelInfo parcelInfo = null;
        parcelInfo = buildParcelInfo(is);
        awbNo = index.incrementAndGet();
        parcelInfo.setAwbNo(awbNo);
        parcelInfo.setStatus("new");
        parcelDataMap.put(awbNo, parcelInfo);
   } catch(Exception ex) {
        logger.error("Getting some exception for creating parcel : "+ex.getMessage(), ex);
   }
   return awbNo;
}

@GET
@Produces(MediaType.APPLICATION_XML)
public StreamingOutput getParcelInfo(@QueryParam("awbNo") int awbNo) {
    ParcelInfo parcelInfo = null;
    String xml = null;
    parcelInfo = parcelDataMap.get(awbNo);

    if (parcelInfo != null) {
        xml = convert(parcelInfo);
    }
    return new ParcelInfoWriter(xml);
}

1 个答案:

答案 0 :(得分:1)

因为您不使用结构化数据而是使用原始InputStream,所以首先删除@Consumes注释;所以你的资源方法应该是:

@POST
@Produces(MediaType.TEXT_PLAIN)
public int createParcel(InputStream is) {
    int awbNo = 0;
    try {
        ParcelInfo parcelInfo = null;
        parcelInfo = buildParcelInfo(is);
        // the rest of your code here
   }catch(Exception ex) {
        // catch specific exception instead of `Exception`
   }
   return awbNo;
}

现在使用Postman来调用您的资源。您的请求的内容正文可以是任何内容(在我的示例中,它是XML,但您可以发送任何您喜欢的内容)。请查看下面的屏幕截图,了解如何正确设置请求:

enter image description here

绘图执行: - )