Abbiamo appena trovato un modo per farlo senza utilizzare più metodi.
Innanzitutto creare una semplice classe per contenere le variabili di percorso:
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;
}
}
quindi definire il metodo di controllo in questo modo:
@RequestMapping(value={
"/abcd",
"/employees/{value}/{id}"
})
public String getEmployees(@RequestParam(value="param", required=false) String param,
EmployeesRequest request) {
if (request.getValue() != null) {
// do something
} else {
// do something else
}
}
Primavera mapperà automaticamente tutte le variabili di percorso disponibili alla classe EmployeesRequest
. Primavera sarà anche fare questo per tutti i parametri di richiesta in modo da poter semplificare le cose ulteriormente aggiungendo il parametro di richiesta a 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;
}
}
E poi finalmente:
@RequestMapping(value={
"/abcd",
"/employees/{value}/{id}"
})
public String getEmployees(EmployeesRequest request) {
if (request.getValue() != null) {
// do something
} else {
// do something else
}
}
Un ulteriore vantaggio di questa soluzione è che ora puoi supportare entrambe le variabili o richiedere i parametri. Significato tutti questi sarebbe valido:
/abcd
/abcd?param=123
/abcd?value=123&id=456¶m=789
/employees/123/456
/employees/123/456?param=123
questo si adatta alla mia situazione, grazie –