如何处理CXF restful webservices中的可选参数

时间:2016-06-23 06:09:19

标签: java web-services rest cxf

我已按照此链接构建了CXF Restful webservices url link

如果我的网址如下所示:

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

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

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

任何人都可以帮我解决如何在CXF Restful webservices中使用可选参数的问题。

2 个答案:

答案 0 :(得分:2)

选项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");

答案 1 :(得分:0)

实际上,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)