Java RESTful服务在@FormParam注释上出错

时间:2016-07-06 16:05:18

标签: rest jersey java-ee-6 glassfish-3 jdk1.7

我正在Java EE 6中编写一个RESTful服务应用程序。我在定义使用@FormParam注释的HTTP GET服务方法时遇到了困难。

我使用的技术:

  • Eclipse EE Kepler IDE
  • JDK v7
  • Glassfish 3(基于Java 6)
  • 泽西岛(Glassfish的一部分)

爪哇:

@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

任何想法是什么罪魁祸首?

1 个答案:

答案 0 :(得分:1)

你应该使用POST,而不是GET。使用GET,浏览器不会设置Content-Type标头,因为params是在URL中发送的,而不是正文。如果你想保持GET,请使用(?<=\\D) #Lookbehind to match non-digit \\. #Match . literally (?=\\D|$) #Lookahead to match non-digit or end of string ,它从URL中的查询字符串中捕获参数