gpt4 book ai didi

java - 如何使用 Jersey 2.0 发布表单

转载 作者:太空狗 更新时间:2023-10-29 13:11:24 25 4
gpt4 key购买 nike

我正在尝试从带有 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

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

@POST
@Path("/delete")
@Produces("application/json")
public String delete(@FormParam("id")String id){

我正在尝试使用这样的测试 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>

我一直在努力让它发挥作用,但没有机会。我已经尝试使用 multipart-form-data 添加 @Consumes() 注释,但无法真正使其工作。我希望有人能帮助我。

最佳答案

谢谢大家的帮助。通过一些代码审查,我发现了问题。尽管我认为其他人不会犯这个特定错误,但我还是会发布它以供将来引用。

问题是我没有使用标准的网络服务器。我已经用 Jersey 实现了一个 netty 服务器,问题出在那个实现中。问题是我没有像我应该的那样将 HTTP 请求中的 header 传递给 Jersey。我在操作过程中丢失了 Content-Type,这意味着 Jersey 无法识别消息类型。

因此,对于任何在尝试使用 Jersey 实现非标准服务器时遇到类似问题的人来说,为了将来引用:当您没有正确传递媒体类型时(ContentRequest 类中有一个名为 getMediaType() 的方法在使用 @FormParam 时,除其他外,用于验证 Content-Type)你将得到这种类型的异常。

再次感谢大家的帮助:)

关于java - 如何使用 Jersey 2.0 发布表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com