Web services Rest WS@Post使用HttpServletRequest不';行不通

Web services Rest WS@Post使用HttpServletRequest不';行不通,web-services,rest,post,cxf,Web Services,Rest,Post,Cxf,以下是我的cxf Rest WS: @POST @OPTIONS @Path("/push") @Produces({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_FORM_URLENCODED }) public Response push(@FormParam(value="agentId") String agentId); 我将其与一个表单一起使用: <form id="form1" METHOD

以下是我的cxf Rest WS:

@POST
@OPTIONS
@Path("/push")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED })
public Response push(@FormParam(value="agentId") String agentId);
我将其与一个表单一起使用:

<form id="form1" METHOD=POST ACTION="http://localhost:8080/uwv_interfacing-0.2.0-SNAPSHOT/api/rest/callHistory/push?AppKey=536f47d5-184f-3041-850c-bcad9f3afa49">
  <input type="hidden" name="agentId" value="ofize">
  <button type="submit" name="modifier" value="1">Submit</button>
</form>

提交
我希望得到一个HttpServletRequest而不是每个字段,但是当我用HttpServletRequest替换“String agentId”时,它是空的,我没有文件。 我试图用“@Context”替换“@FormParam(value=“agentId”)”,但我不确定使用哪种好的anotation。 有什么想法吗?

你可以像

import javax.ws.rs.core.Context;
import org.apache.cxf.jaxrs.ext.MessageContext;
...
@Context 
private MessageContext messageContext;
...
// in your restful method, you could do something like
HttpServletRequest httpServletRequest = messageContext.getHttpServletRequest();

您可以使用
@Context(限定名称:javax.ws.rs.core.Context)
直接获取HttpServletRequest,因此您的代码应该如下所示

@POST
@OPTIONS
@Path("/push")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED })
public Response push(@FormParam(value="agentId") String agentId, final @Context HttpServletRequest request);

您使用jersey/cxf等什么技术来公开rest端点?我使用的是cxf,抱歉不确定,是否可以参考这个问题来获取一些输入?(使用多部分表单数据)多部分表单数据不是用于在表单中发布文件吗?我只想发布数据(字符串,int…),我得到的数据完全相同,没有参数,你不明白吗?你什么意思?