私は、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を使用して)アプリケーションを起動すると、すべてがうまく始まります。私は私の残りのエンドポイントを呼び出すしようとすると、SpringデータJPAとQueryDslをRESTコントローラ経由で使用している場合
しかし、私はいつも次の例外を取得:
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ブート管理エンドポイント/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);
}
を作成しました。おそらくこれはhttps://stackoverflow.com/questions/32366562/how-do-i-configure-xml-querydsl-to-be-used-with-spring-data-and-spring-mvc –