java Restful Web服务从POST操作中的文本框中获取数据

时间:2014-05-01 23:08:10

标签: java web-services rest post

我是Java中的Restful web服务的新手,这是我的第一个Web应用程序,我搜索了很多,但每个人都提出了比我需要的更复杂的问题。

我有一个非常简单的html,带有文本框和提交按钮。我在我的网络服务中也有一个POST功能,如下所示:

@POST
@Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_JSON})       
public Response showSearchResult(String incomingData) throws Exception {                
    String query = incomingData;
    RepositoryMongo repository = new RepositoryMongo("InvertedIndex", "InvertedIndex", "documents");
    InvertedIndex invertedIndex = new InvertedIndex(repository);
    ArrayList<Posting> result = invertedIndex.processQuery_Posting_Based(query, 10,"1");
    String htmlResult = invertedIndex.getHTMLResult(result);
    return Response.ok(htmlResult).build();
}

问题是我的incomingData =“query_input = canada + singer&amp; search = search”,而我希望它只是文本框的内容。我可以解析我收到的字符串,但这样正确吗?有什么方法可以直接把“加拿大歌手”作为输入吗?我该如何控制输入类型?

2 个答案:

答案 0 :(得分:1)

您可以对POST请求使用@FormParam注释,或为GET请求使用@PathParam注释。这些参数继续用于您的方法,以指示参数的值应从URL(对于GET)或已发布的正文(对于POST)中拉出。

查看http://www.vogella.com/tutorials/REST/article.html的第7.3节,其中有一个工作示例。

答案 1 :(得分:0)

对于此结果 - “query_input = canada + singer”,您可以使用@QueryParam("query_input")获取网址值。

可替换地, 我们甚至可以使用这个@Context UriInfo

来实现它

getQueryParameters()方法有getFirst - 在其中包含fetch的参数,如下所示

String query_input_value= url.getQueryParameters().getFirst("query_input"); 

试试这个:

@POST
@Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_JSON})       
public Response showSearchResult(@Context UriInfo url) throws Exception {  

String query_input_value= url.getQueryParameters().getFirst("query_input");              
    String query = incomingData;
    RepositoryMongo repository = new RepositoryMongo("InvertedIndex", "InvertedIndex", "documents");
    InvertedIndex invertedIndex = new InvertedIndex(repository);
    ArrayList<Posting> result = invertedIndex.processQuery_Posting_Based(query, 10,"1");
    String htmlResult = invertedIndex.getHTMLResult(result);
    return Response.ok(htmlResult).build();
}