JAX-RS 混合 @FormParam 和 MultivaluedMap<String, String> formParams

JAX-RS Mixing @FormParam and MultivaluedMap<String, String> formParams

我有一个方法returns所有记录父亲记录的儿子(例如文档和行):

public Datasource<Son> getSonsFromParent( @FormParam(value = "idparent") Long idparent,
        MultivaluedMap<String, String> formParams) throws Exception;

我有一个众所周知的参数,"idparent"。我只想使用 @FormParam 获取此参数。将此方法公开给其他人很有用:他们知道需要 "idparent"。

另外,我有一些未定义的参数用于排序和过滤我的数据源,例如

 sort[0]=name

  sort[1]=surname

  filter[0][field]=name

  filter[0][operator]=equal

  filter[0][value]=Marc

问题是:使用@FormParam,多值映射总是空的。

如何将 MultivaluedMap 和 @FormParam 混合在一起?

您不能在同一个 资源方法 中使用 @Formparam, MultiValuedMap, @FormDataParam,@BeanParam。 JAX-RS 不知道哪个对象是映射请求中的信息的合适对象。

无论如何,我不明白你为什么不只使用 MultiValuedMap<String,String> formParams 而只使用 validate idParent.

使用@Formparam 不会使这样的参数需要,你通过你的代码实现负责这个:

public Datasource<Son> getSonsFromParent( MultivaluedMap<String, String> formParams) {

  String idParent = formParams.getFirst("idparent");

  if(idParent == null || idParent.isEmpty()){
     // return .... [idParent is required] 400 Bad Request
  }
}

如果您打算向您的客户公开此类参数,这也意味着您的此 API 文档将公开所有 参数,而不仅仅是必需的一个对吗?