JAX-RS混合@FormParam和MultivaluedMap <string,string =“”> formParams

时间:2018-04-16 14:38:26

标签: java rest annotations jersey jax-rs

我有一个方法可以返回父记录的所有记录(例如文档和行):

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混合在一起?

1 个答案:

答案 0 :(得分:2)

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

在任何情况下,我都不明白您为什么不使用MultiValuedMap<String,String> formParams而只是验证 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 的文档会公开所有参数,而不仅仅是所需的参数?