Java RESTful @FormParam 注释上的服务错误
Java RESTful service errs on @FormParam annotation
我正在 Java EE 6 中编写一个 RESTful 服务应用程序。我在定义使用 @FormParam 注释的 HTTP GET 服务方法时遇到了困难。
我使用的技术:
- Eclipse EE 开普勒 IDE
- JDKv7
- Glassfish 3(基于Java 6)
- 泽西岛(Glassfish 的一部分)
Java:
@GET
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_HTML)
@Path("/getFromForm")
public String getFromForm(@FormParam("input") String input){
log.log(Level.INFO, "Invoked getFromForm");
String html = "<html> <body>"
+"<center><h1> "+input+"</h1></center>"
+"</body></html>";
return html;
}
JSP:
<form action="/RESTfulServiceDrill/rest/v6/html/getFromForm" method="get"
enctype="application/x-www-form-urlencoded">
<label> Add message: </label>
<input type="text" name="input"/>
<input type="submit" value="OK"/>
<input type="reset" value="clear"/>
</form>
异常:
java.lang.IllegalStateException: The @FormParam is utilized when the content type of the request entity is not application/x-www-form-urlencoded
知道罪魁祸首是什么吗?
您应该使用 POST,而不是 GET。使用 GET,浏览器不会设置 Content-Type header,因为参数是在 URL 中发送的,而不是 body。如果你想用 GET 保留它,使用 @QueryParam
,它从 URL
中的查询字符串中捕获参数
我正在 Java EE 6 中编写一个 RESTful 服务应用程序。我在定义使用 @FormParam 注释的 HTTP GET 服务方法时遇到了困难。
我使用的技术:
- Eclipse EE 开普勒 IDE
- JDKv7
- Glassfish 3(基于Java 6)
- 泽西岛(Glassfish 的一部分)
Java:
@GET
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_HTML)
@Path("/getFromForm")
public String getFromForm(@FormParam("input") String input){
log.log(Level.INFO, "Invoked getFromForm");
String html = "<html> <body>"
+"<center><h1> "+input+"</h1></center>"
+"</body></html>";
return html;
}
JSP:
<form action="/RESTfulServiceDrill/rest/v6/html/getFromForm" method="get"
enctype="application/x-www-form-urlencoded">
<label> Add message: </label>
<input type="text" name="input"/>
<input type="submit" value="OK"/>
<input type="reset" value="clear"/>
</form>
异常:
java.lang.IllegalStateException: The @FormParam is utilized when the content type of the request entity is not application/x-www-form-urlencoded
知道罪魁祸首是什么吗?
您应该使用 POST,而不是 GET。使用 GET,浏览器不会设置 Content-Type header,因为参数是在 URL 中发送的,而不是 body。如果你想用 GET 保留它,使用 @QueryParam
,它从 URL