Sto cercando di implementare un metodo controller simile a come è documentato nell'ultimo treno di rilascio di Spring Data di Gosling che supporta QueryDsl. Ho implementato il controller come mostrato nell'esempio nella documentazione di http://docs.spring.io/spring-data/jpa/docs/1.9.0.RELEASE/reference/html/#core.web.type-safe. Tutto viene compilato e quando avvio l'applicazione (utilizzando Spring Boot 1.2.5.RELEASE), tutto inizia correttamente.Eccezione utilizzando Spring Data JPA e QueryDsl tramite REST Controller
Tuttavia, quando provo a chiamare il mio riposo endpoint, ho sempre arrivare la seguente eccezione:
org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mysema.query.types.Predicate]: Specified class is an interface
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:80)
La mia ipotesi è che il QuerydslPredicateArgumentResolver
non viene applicato alla richiesta, e, quindi, l'eccezione. Ma vedo che lo QuerydslPredicateArgumentResolver
è registrato come bean quando interrogo l'endpoint di gestione Spring Boot /manage/beans
. Ho anche assicurato che @EnableSpringDataWebSupport
sia nella mia classe @Configuration
senza alcun effetto.
Ho il controllore annotato con @BasePathAwareController
, poiché sto utilizzando questo con Spring Data REST e voglio che i metodi siano in un percorso simile a quelli esposti da Spring Data REST. Ho anche provato a usare @RepositoryRestController
, ma non sembrava importare. Tuttavia, quando si utilizza @RestController
e lo si inserisce in un percorso diverso dal percorso di base utilizzato da Spring Data REST, le cose hanno funzionato. Quindi la domanda è, dovrebbe funzionare?
L'intero comando in questo momento è:
@RestController
@RequestMapping (value = "/ query") public class AvailController { privato AvailRepository finale pronti contro termine;
@Autowired
public AvailController(AvailRepository repository)
{
this.repo = repository;
}
@RequestMapping(value = "/avails", method = GET)
public @ResponseBody Page<Avail> getAvails(Model model,
@QuerydslPredicate(root = Avail.class) Predicate predicate,
Pageable pageable,
@RequestParam MultiValueMap<String, String> parameters)
{
return repo.findAll(predicate, pageable);
}
ho ottenuto che funziona, ma con configurazione XML. Forse questo potrebbe aiutare https://stackoverflow.com/questions/32366562/how-do-i-configure-xml-querydsl-to-be-used-with-spring-data-and-spring-mvc –