如何使用Jersey 2.0发布表单

XFC*_*FCC 10 html java rest jax-ws jersey

我试图从带有球衣的表格中获取一些数据,虽然这将是一项容易完成的任务,但是当我尝试发布一些内容时,我收到了一个错误.

Caused by: java.lang.IllegalStateException: The @FormParam is utilized when the content type of the request entity is not application/x-www-form-urlencoded
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.ensureValidRequest(FormParamValueFactoryProvider.java:126)
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.getForm(FormParamValueFactoryProvider.java:111)
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.get(FormParamValueFactoryProvider.java:94)
at org.glassfish.jersey.server.internal.inject.AbstractHttpContextValueFactory.provide(AbstractHttpContextValueFactory.java:65)
at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:80)
... 36 more
Run Code Online (Sandbox Code Playgroud)

我认为这是堆栈跟踪的相关部分.现在我正在使用的代码:

@POST
@Path("/delete")
@Produces("application/json")
public String delete(@FormParam("id")String id){
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用像这样的测试html页面进行POST:

<form action="<path to the server>/delete" method="post">
    primary_id: <input type="text" name="primary_id" /><br />
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

我一直试图让它发挥作用,但没有机会.我尝试使用multipart-form-data添加@Consumes()注释,但不能真正使它工作.我希望有人可以帮我一臂之力.

XFC*_*FCC 9

谢谢大家的帮助.通过一些代码审查,我发现了问题.即使我认为没有其他人会犯这个特别的错误,我也会发布它以供将来参考.

问题是我没有使用标准的Web服务器.我已经用Jersey实现了一个netty服务器,问题出在那个实现上.问题是我没有按照我的要求将HTTP请求中的标头传递给Jersey.我在操作过程中丢失了Content-Type,这意味着Jersey无法识别消息类型.

所以,为了将来参考,对于在尝试使用jersey实现非标准服务器时遇到类似问题的任何人:当你没有正确传递媒体类型时(在ContentRequest类中有一个名为getMediaType()的方法,它被使用除其他事项外,在使用@FormParam时验证Content-Type,你会得到这种类型的异常.

再次,谢谢大家的帮助:)