如果动态创建表单元素,如何使用@FormParam

时间:2014-08-26 16:41:01

标签: rest jersey

由于在此应用程序中动态创建html表单元素,因此不知道元素的数量。如何使用@FormParam注释获取元素信息?例如,以下代码获取两个表单元素的信息:

    @POST
    @Path("/newpage")
    @Produces("text/html")
    public String func(@FormParam("element1") String firstElement,
                       @FormParam("element2") String secondElement) throws IOException 
    {
         // your code goes here
    }

这是不可能的,因为我们不知道元素的数量。

2 个答案:

答案 0 :(得分:4)

我无法想到使用@FormParam执行此操作的方法,但您可以使用@Context访问HttpServletRequest(引用所有表单参数的地图):

// you can make this a member of the Resource class and access within the Resource methods
@Context
private HttpServletRequest request;

@POST
@Path("/newpage")
@Produces("text/html")
public String func() throws IOException 
{
    // retrieve the map of all form parameters (regardless of how many there are)
    final Map<String, String[]> params = request.getParameterMap();

    // now you can iterate over the key set and process each field as necessary
    for(String fieldName : params.keySet())
    {
        String[] fieldValues = params.get(fieldName);

        // your code goes here
    }
}

答案 1 :(得分:3)

正确的答案实际上是使用MultivaluedMap参数捕获主体(使用Jersey测试)

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_HTML)
public String post(MultivaluedMap<String, String> formParams)
{
 ... iterate over formParams at will