我試圖實現一個控制器方法,類似於最新的支持QueryDsl的Spring Data的Gosling發行版本中記錄的方法。我已經實施了控制器,如文檔http://docs.spring.io/spring-data/jpa/docs/1.9.0.RELEASE/reference/html/#core.web.type-safe中的示例所示。一切都編譯完成,當我啓動應用程序(使用Spring Boot 1.2.5.RELEASE)時,一切都很順利。通過REST控制器使用Spring Data JPA和QueryDsl的異常
然而,當我嘗試打電話給我休息終點,我總是得到以下異常:
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)
我的猜測是,QuerydslPredicateArgumentResolver
沒有被應用到該請求,並由此例外。但是當我查詢Spring Boot管理端點/manage/beans
時,我看到QuerydslPredicateArgumentResolver
被註冊爲bean。我也確保@EnableSpringDataWebSupport
在我的@Configuration
類別上無效。
我有控制器註釋@BasePathAwareController
,因爲我在Spring Data REST中使用了這個方法,我希望這些方法與Spring Data REST公開的類似。我也嘗試使用@RepositoryRestController
,但這似乎並不重要。但是,當使用@RestController
並將其放在不同於Spring Data REST正在使用的基本路徑的路徑下時,情況就起作用了。所以問題是,它應該工作嗎?
整個控制器現在的問題是:
@RestController
@RequestMapping(值= 「/查詢」) 公共類AvailController { 私人最終AvailRepository回購;
@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);
}
我得到它的工作,但與XML配置。也許這可能有助於https://stackoverflow.com/questions/32366562/how-do-i-configure-xml-querydsl-to-be-used-with-spring-data-and-spring-mvc –