2015-09-09 3 views
11

私は、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); 
} 
+0

を作成しました。おそらくこれはhttps://stackoverflow.com/questions/32366562/how-do-i-configure-xml-querydsl-to-be-used-with-spring-data-and-spring-mvc –

答えて

-1

春データRESTとして返される値を模倣するカスタムコントローラを実装しようとしたとき、私はまた、この問題がありました。私はコントローラメソッドにQuerydslPredicateを注入したいと迷惑な 'BeanInstantiationException'を持っていました。

私は自分のアプリケーションに以下の構成ファイルを追加することで、このための回避策が見つかりました:

@Configuration 
@Order(Ordered.HIGHEST_PRECEDENCE ) 
public class MvcConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    @Qualifier("repositoryExporterHandlerAdapter") 
    RequestMappingHandlerAdapter repositoryExporterHandlerAdapter; 

    @Override 
    public void addArgumentResolvers(
      List<HandlerMethodArgumentResolver> argumentResolvers) { 
     List<HandlerMethodArgumentResolver> customArgumentResolvers = repositoryExporterHandlerAdapter.getCustomArgumentResolvers(); 
     argumentResolvers.addAll(customArgumentResolvers); 
    } 
} 

は、参考のためにここを参照してください:https://jira.spring.io/browse/DATAREST-657

0

私は述語のインスタンス化と同じ問題を抱えていました。例では:

@Controller 
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) 
class UserController { 

private final UserRepository repository; 

@RequestMapping(value = "/", method = RequestMethod.GET) 
String index(Model model, // 
     @QuerydslPredicate(root = User.class) Predicate predicate, // 
     @PageableDefault(sort = { "lastname", "firstname" }) Pageable pageable, // 
     @RequestParam MultiValueMap<String, String> parameters) { 
(...) 

https://github.com/spring-projects/spring-data-examples/blob/master/web/querydsl/src/main/java/example/users/web/UserController.java#L42は)ちょうど@Controllerを使用していると私は理由のようです@RepositoryRestControllerを、使用していました。 @RestControllerも私のために働く。

私はそれが動作しますが、XMLの設定でしまったhttps://jira.spring.io/browse/DATAREST-838

+1

に役立つかもしれません。答えに必須の部分を含めるほうがいいですよ!! –

関連する問題