如何处理 CXF restful 网络服务中的可选参数

How to handle optional parameters in CXF restful webservices

我已按照此 link 构建 CXF Restful 网络服务 url link

如果假设我的 url 如下所述:

http://localhost:8080/CxfRestService/rest/employeeservices/getemployeedetail?employeeId=1&empProfession=software

这里,"empProfession"参数对我来说是可选的。

所以,即使我省略该参数并点击下面的 url,我也应该得到所需的响应。 http://localhost:8080/CxfRestService/rest/employeeservices/getemployeedetail?employeeId=1

任何人都可以帮助我了解如何在 CXF Restful 网络服务中使用可选参数。

选项 1 - 声明参数并检查 != null

 public Response getEmployeeDetail(@QueryParam("employeeId") String employeeId, @QueryParam("empProfession") String empProfession);

选项 2 - 声明 en 对象以接收所有已知参数

 public Response getEmployeeDetail(@QueryParam("") EmployeeFilter filter) ;

 public class EmployeeFilter {
    public void setEmployeeId(String id) {...}
    public void setEmpProfession(String p) {...}  
 }

选项 3 - 不声明参数并解析 URI。如果您可以接受非固定参数,此选项可能会有用

 public Response getEmployeeDetail( @Context UriInfo uriInfo) {
      MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
      String employeeId = params.getFirst("employeeId");
      String empProfession = params.getFirst("empProfession");

事实上,CXF 中的所有参数都不是强制性的,您不能使用 @QueryParam 更改它(您可以使用 @RequestParam(required=false) 与 Spring-REST 进行比较)。

解决方法是添加@NotNull javax.validation注解,表示一个参数是必须的

这样你就可以使用

  • CXF3 ValidationFeature 使用@Valid 自动验证它。
  • CXF3 SwaggerFeature 还将呈现 API 文档中的强制参数
  • CXF2 手动执行 bean 验证

有关使用 javax.validation 注释的更多信息,请参阅 CXF3 ValidationFeature:https://cwiki.apache.org/confluence/display/CXF20DOC/ValidationFeature

在此处了解有关 CXF3 Swagger 功能的更多信息:http://cxf.apache.org/docs/swagger2feature.html)。

这个答案是相关的:Required @QueryParam in JAX-RS (and what to do in their absence)