user9735824:
Tengo un servicio que devolverá resto List
de los objetos
public class MyObject {
private String name;
private String state;
}
Ahora, necesito objeto de filtro de la lista basada en campos provistos de guardia resto:
http://localhost:8080/myuri?state=NY
Ahora, necesito desarrollar filtros personalizados y yo sólo encuentro filtro de propiedades no es algo que quiero. Hay una manera de lograr esto.
Michael Ziober:
No es necesario utilizar Jackson
para hacer esto. Sólo filtrarla usando Stream API
. Si los datos, se cargan desde DB
, filtro usando SQL
's WHERE
cláusula.
Ejemplo:
@GetMapping(value = "/states", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<MyObject> loadStates(@RequestParam(name = "state", defaultValue = "NY", required = false) String[] states) {
return service.loadAndFilterByState(states);
}
Si usted tiene una lista en caché, puede filtrarlo, como a continuación:
@GetMapping(value = "/states", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<MyObject> loadStates(@RequestParam(name = "state", defaultValue = "NY", required = false) String[] states) {
Arrays.sort(states);
return getStates()
.stream()
.filter(s -> Arrays.binarySearch(states, s.getState()) > -1)
.collect(Collectors.toList());
}
Ver también: