CRUD - Filtro

Uma requisição utilizando o método GET do protocolo HTTP contra um recurso que esteja estendendo da classe AbstractREST com o nome dos campos da entidade passados na query string retornará a quem solicitou o conjunto de dados filtrados com o que foi solicitado.

Um exemplo para esclarecer:

Temos uma aplicação com um recurso chamado User e uma classe chamada UserREST que estende de AbstractREST.

User.java

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)    
    private Long id;

    @Size(max = 100, min = 2)
    @Column(length = 100)
    @NotNull
    private String name;

    @Size(max = 100, min = 4)
    @Column(length = 100, unique = true)
    @NotNull
    private String email;

    @Column(length = 1)    
    private String type;

    // getters and setters
}

UserREST.java

@Path("users")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@RequestScoped
public class UserREST extends AbstractREST<User, Long> {

    @Override
    @GET    
    public Result find() {
        return bc.find();
    }
}

Quando uma requisição do tipo GET do protocolo HTTP é enviada para o recurso de usuários

$ curl -XGET http://localhost:8080/api/users?id=1,2,3,4

O retorno da requisição acima será

$ curl -XGET http://localhost:8080/api/users
< Accept-Range: user 20
< Access-Control-Allow-Methods: HEAD, OPTIONS, TRACE, GET, POST, PUT, PATCH, DELETE
< Access-Control-Expose-Headers: Accept-Range, Content-Range, Link
< .... outros headers
< 
[
    {"id":1,"name":"João 1", "email": "[email protected]", "type": "A"},
    {"id":2,"name":"João 2", "email": "[email protected]", "type": "A"},
    {"id":3,"name":"João 3", "email": "[email protected]", "type": "B"},
    {"id":4,"name":"João 4", "email": "[email protected]", "type": "C"}
]

O retorno acima demostra a aplicação de um filtro no campo 'id' com os valores 1 ou 2 ou 3 ou 4.

Para a requisição:

$ curl -XGET http://localhost:8080/api/users?name=João 1,João 4&type=A

O retorno acima demostra uma filtragem dos usuários seguindo a regra:

(name = 'João 1' OU 'João 4') E (type = 'A')

No exemplo acima apenas o registro abaixo será retornado pois 'João 4' não tem o 'type' igual a 'A';

    {"id":1,"name":"João 1", "email": "[email protected]", "type": "A"}

results matching ""

    No results matching ""