【问题标题】:Rest WS @Post consumes HttpServletRequest doesn't workRest WS @Post 消耗 HttpServletRequest 不起作用
【发布时间】:2015-01-28 08:33:50
【问题描述】:

这是我的 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")”,但我不确定要使用的好注释。 有什么想法吗?

【问题讨论】:

  • 你使用 jersey/cxf 等什么技术来暴露休息端点?
  • 我正在使用 cxf,对不起
  • 不确定,是否可以参考这个问题来获得一些意见? (使用多部分表单数据)stackoverflow.com/questions/28062986/…
  • 多部分表单数据不是用来在表单中发布文件吗?我只想发布数据(字符串,int ...)

标签: web-services rest post cxf


【解决方案1】:

你可以在你的类中注入MessageContext,比如

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();

【讨论】:

  • 没有参数的情况下我完全一样
  • 没找到你?什么意思?
【解决方案2】:

您可以使用@Context( qualified name: 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多