2017-02-07 53 views
6

Başlığın belirttiği gibi.Baharı kullanarak verileri nasıl huzurlu bir şekilde filtreleyebilirim?

Temelde böyle ulaşmada herhangi hazır spring way var mı

/api/todos/?completed=eq.true&created_at=lt.1486462109399 

gibi isteklerini yapmak isterim? Page/Pageable mekanizmasına benzer bir şey harika olurdu.

Hiçbiri varsa, bunu Hibernate Criteria Queries & Argüman Yeniden Çözümleyici kullanarak gerçekleştirebileceğimi düşünüyorum. Temelde bana Özel bir Argüman çözümleyici bir Kriterleri içine sorgu dizesi dönüm sorumlu olacak

@GetMapping 
public ResponseEntity<Page<TodoDTO>> listAll(Criteria criteria, Pageable pageable) 
{ 
     Page<Todo> todos = todoService.listAll(criteria, pageable) 
     ... 
} 

gibi benim denetleyicileri yazmaya izin. Henüz hizmetin içinde nasıl idare edeceğimi tam olarak bilmiyordum ama bunu uygulamaya çalışacağım yön budur.

Bu iyi bir yaklaşım mıdır? Herhangi bir tavsiye? (Hepsi zaten böyle bir hazır mekanizma olmadığını varsayarak).

Yardımınız çok takdir edilmektedir.

+0

Son defa. Ancak, bununla nasıl başaracağınızı kontrol edebilirsiniz: ile Fiql/rsql Burada iyi bir [blog] (http://www.baeldung.com/rest-api-search-language-rsql-fiql) var. – gkatzioura

+0

Bu soruyu sorduğunuzdan beri bir yıl geçti ve nerede olduğunuzu bilmiyorum ama bu sizin sorununuzu çözmeli: http://www.baeldung.com/rest-api-search-language-spring-data- Teknik Özellikler Ayrıca bu soruyu da kontrol edebilirsiniz: https://stackoverflow.com/questions/20280708/filtering-database-rows-with-spring-data-jpa-and-spring-mvc – leventunver

cevap

1

akıcı sorgu API oluşturmak için bir diğer seçenek bir RSQL ayrıştırıcı kullanmaktır İşte çıkan API işlemek mümkün olacaktır bir test URL örneğidir. RSQL, RESTful API'lerde girişlerin parametreli filtrelenmesi için bir sorgulama dilidir. this article izleyin ve API gibi URL'leri işlemek mümkün olacaktır:

http://localhost:8080/users?search=firstName==jo*;age<25 

Numune kontrolörü: Ben tek çözüm bir yay bulamadık aynı problem vardı

@RestController 
@RequestMapping(value = "/users") 
public class UserController { 

    @Autowired 
    private UserRepository repo; 

    @GetMapping 
    public List<User> findAllByRsql(@RequestParam(value = "search") String search) { 
     Node rootNode = new RSQLParser().parse(search); 
     Specification<User> spec = rootNode.accept(new CustomRsqlVisitor<User>()); 
     return repo.findAll(spec); 
    } 

} 
0

Search/Filter REST API using Spring Data JPA and Specifications oluşturabilirsiniz.

http://localhost:8080/users?search=lastName:doe,age>25 

ve örnek kontrolörü:

@RestController 
@RequestMapping(value = "/users") 
public class UserController { 

    @Autowired 
    private UserRepository repo; 

    @GetMapping 
    public List<User> search(@RequestParam(value = "search") String search) { 
     UserSpecificationsBuilder builder = new UserSpecificationsBuilder(); 
     Pattern pattern = Pattern.compile("(\w+?)(:|<|>)(\w+?),"); 
     Matcher matcher = pattern.matcher(search + ","); 
     while (matcher.find()) { 
      builder.with(matcher.group(1), matcher.group(2), matcher.group(3)); 
     } 

     Specification<User> spec = builder.build(); 
     return repo.findAll(spec); 
    } 
}