如何处理 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)
我已按照此 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)