如何从jersey servlet中的curl请求中提取参数?

时间:2015-08-04 13:45:28

标签: java rest curl jersey jax-rs

我正在以

的形式向我的球衣servlet发送一个curl post restful request
curl -i -X POST -d "debit_user_id=/custome/mobile_number:917827448775"http://localhost:8080/switch/apikongcall.do/transactions

我需要在我的servlet中获取debit_user_id,我的Post方法的代码是

@POST
//@Path("/transactions")
//@Consumes(MediaType.APPLICATION_JSON)
public Response createTrackInJSON(@QueryParam("debit_user_id") String debit_user_id) {

    //Log logger = null;
    this.logger = LogFactory.getLog(getClass());
    this.logger.info("Inside post method"+debit_user_id);
    String response = debit_user_id;

     //String response = "testParam is: " + recipient_id + "\n";
    //String result = "Track saved : " + track;
    return Response.status(200).entity(response).build();

但是我的debit_user_id是空的。是否正确的方法来使curl restful请求或我在servlet中提取它的方式是错误的。 我是jax-rs的新手。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

curl的-d选项传递了url编码的表单参数。您必须将@QueryParam更改为@FormParam以使给定的Curl命令有效。另外,只需将参数名称指定为mobile_number,而不指定您在curl命令中使用的路径,如下所示:

curl -i -X POST -d "debit_user_id=mobile_number:917827448775" http://localhost:8080/switch/apikongcall.do/transactions

映射到

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response createTrackInJSON(@FormParam("mobile_number") String debit_user_id) {
    ...
}

如果你确实想要一个查询参数,你的curl命令需要改变:

curl -i -X POST http://localhost:8080/switch/apikongcall.do/transactions?mobile_number=917827448775

出于安全原因,将移动电话号码保留在邮件正文中可能更好,因此我使用FormParam而不是QueryParam。