我正在尝试创建一个使用Spring Data QueryDSL的控制器。
我的控制器看起来像这样:
@GetMapping("/playerAccount")
public Iterable<PlayerAccount> getPlayerAccounts(com.querydsl.core.types.Predicate predicate) {
return repository.findAll(predicate);
}
我的实体(为简便起见,简称为]
@Entity
public class PlayerAccount {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
[当我调用GET / playerAccount API时,出现异常IllegalStateException“找不到接口com.querydsl.core.types.Predicate的主要或默认构造函数”(由org.springframework.web.method.annotation.ModelAttributeMethodProcessor# createAttribute)。
可能有什么问题?
谢谢
编辑:
我的pom.xml包含
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
和
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
我没有@EnableSpringDataWebSupport,但必须具有等效的名称。
要使其正常工作,您必须牢记一些注意事项。
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
com.fully.qualified.package.name.QPlayerAccount
)<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
通过在应用程序的主类中指定@EnableSpringDataWebSupport
来启用Spring数据Web支持,以支持Web请求中的querydsl。
为Pradicate
提供元信息以随时随地填充
@GetMapping("/playerAccount")
public Iterable<PlayerAccount> getPlayerAccounts(@QuerydslPredicate(root = PlayerAccount.class) Predicate predicate) {
return repository.findAll(predicate);
}
现在您可以提出使用查询dsl的请求了:GET /playerAccount
应该返回所有记录并拨打GET /playerAccount?name=Nick
[
{
id: 1,
name: "Nick"
}
]
希望有帮助!