2017-08-10 128 views
1

我被要求使用动态参数来实现对REST Web服务的请求。我将用一个例子来解释一下: 现在我们的请求对象的字段是三个字符串,它们是从控制器获取的并用于实现业务逻辑。明天,我们可能需要引入另一个参数,所以我建议使用Map来实现请求对象,这样我们就可以在请求中管理超过3个属性,而无需打开代码并且不得不重新部署服务。Rest中的动态请求参数WS

现在,我的问题是,这可能吗?我想是的,但无论如何,控制器不知道如何处理新插入的属性,或者它永远不会使用它!所以,恕我直言,这是无用的返工,因为我们需要打开代码并重新部署.war。

在此先感谢您的帮助。

P.S. Web服务是为GraphDB的包装要求,如果它可以帮助

回答

0

如果您正在使用GET方法,你可以得到的参数名称值如下图所示片段:

@GET 
public String get(@Context UriInfo ui) { 
    MultivaluedMap<String, String> queryParams = ui.getQueryParameters(); 
    MultivaluedMap<String, String> pathParams = ui.getPathParameters(); 
} 

对于表单参数就可以做到以下几点:

@POST 
@Consumes("application/x-www-form-urlencoded") 
public void post(MultivaluedMap<String, String> formParams) { 
    // Store the message 
} 

通过使用MultivaluedMap,你可以传递任何参数TH e Rest服务,您可以处理业务逻辑。

参考:Extracting request params

+0

谢谢,这是我需要的一个很好的实现。但是我没有解释我的主要疑问,对不起。 如果我实现了这种请求,有一天我需要向我的请求中引入另一个属性,我是否需要打开代码?或者我只需要将属性添加到我的请求中? 再次感谢 –

+0

如果您在客户端添加属性,您应该更改客户端的代码...因为您没有使用任何DTO,如果没有任何效果影响服务,您不会更改服务端。您将更改所需的服务方法及其业务逻辑。 – NamingException