我找到了一种方法,可以不使用多种方法来实现这个。
首先创建一个简单的类来保存路径变量:
public class EmployeesRequest {
private String value;
private String id;
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.value = value;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
}
然后按照以下方式定义您的控制器方法:
@RequestMapping(value={
"/abcd",
"/employees/{value}/{id}"
})
public String getEmployees(@RequestParam(value="param", required=false) String param,
EmployeesRequest request) {
if (request.getValue() != null) {
} else {
}
}
Spring会自动映射任何可用的路径变量到EmployeesRequest
类。对于任何请求参数,Spring也会这样做,因此您可以通过将请求参数添加到EmployeesRequest
来进一步简化:
public class EmployeesRequest {
private String value;
private String id;
private String param;
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.value = value;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getParam() {
return this.param;
}
public void setParam(String param) {
this.param = param;
}
}
最后,最终步骤是:
@RequestMapping(value={
"/abcd",
"/employees/{value}/{id}"
})
public String getEmployees(EmployeesRequest request) {
if (request.getValue() != null) {
} else {
}
}
这种解决方案的另一个好处是现在您可以支持变量或请求参数。这意味着所有这些都是有效的:
/abcd
/abcd?param=123
/abcd?value=123&id=456¶m=789
/employees/123/456
/employees/123/456?param=123