【问题标题】:How to pass InputStream to REST service POST method如何将 InputStream 传递给 REST 服务 POST 方法
【发布时间】:2017-03-07 01:35:10
【问题描述】:

如何使用 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);
}

【问题讨论】:

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


    【解决方案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,但您可以发送任何您喜欢的内容)。看看下面的截图如何正确设置请求:

    请执行我的绘图 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2020-04-03
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      相关资源
      最近更新 更多