Java SpringMVC:xml和注释配置之间的问题

Java SpringMVC:xml和注释配置之间的问题,java,spring,spring-mvc,spring-data-jpa,spring-annotations,Java,Spring,Spring Mvc,Spring Data Jpa,Spring Annotations,我已经创建了一个简单的控制器 @GetMapping("/playerAccount") public Iterable<PlayerAccount> getPlayerAccounts(com.querydsl.core.types.Predicate predicate) { return repository.findAll(predicate); } 然后问题就消失了 我真的不明白为什么。这可能是什么原因?我认为它们实际上是等价的(一个是基于

我已经创建了一个简单的控制器

@GetMapping("/playerAccount")
    public Iterable<PlayerAccount> getPlayerAccounts(com.querydsl.core.types.Predicate predicate) {
        return repository.findAll(predicate);
    }
然后问题就消失了

我真的不明白为什么。这可能是什么原因?我认为它们实际上是等价的(一个是基于xml的配置,另一个是基于java/注释的配置)

我阅读了Java和Xml配置的结合,但没有看到任何相关内容


编辑:

从到目前为止我得到的(少数)评论/回答中,我明白在API中使用谓词可能不是最佳选择

虽然我很想了解bug的本质,但我首先要解决我试图解决的最初问题:

假设我有一个
MyEntity
实体,它由10个不同的字段(具有不同的名称和类型)组成。我想很容易地搜索它。如果我创建以下(空)接口:

public interface MyEntityRepository extends JpaRepository<MyEntity, Long>, QuerydslPredicateExecutor<MyEntity> {
}
公共接口MyEntityRepository扩展了JpaRepository、QueryDSL谓词执行器{
}
然后,不需要任何其他代码(除了xml配置),我就可以轻松地在数据库中搜索myEntity实体

现在我只想将该功能公开给Rest端点。理想情况下,如果我在我的
MyEntity
中添加一个新字段,我希望API能够自动处理该新字段,就像
MyEntityRepository
一样,而不修改控制器


我认为这是Spring数据的目的,也是一种很好的方法,但请告诉我是否有更好/更常见的方法来为给定实体创建搜索API。

我没有看到它返回异常,这就是为什么我认为这是一个依赖性问题。
试着让你的代码看起来像这样,它就会做到

@RestController
public class MyClass {

    @Autowired
    private final MyRepository repository;
    @GetMapping("/playerAccount")
    public Iterable<PlayerAccount> getPlayerAccounts() {
        return repository.findAll();
    }

你能分享整个控制器代码吗?控制器只包含这一个方法。你添加了spring web依赖项了吗?如果你想问的话,我的maven pom.xml中有一个org.springframework:spring web依赖项。它与java注释一起工作,不做任何其他更改,但在等效的xml配置中引发异常。没有对pom.xml或其他任何内容的更改。根据Spring版本的不同,可能会有一些子项差异(出于历史原因)。然而,让人们创建这样的谓词是troubel等待的事情。在这种情况下,用户无法像以前那样搜索playerAccount。例如,您只需要添加RequestParam注释,我将修改代码使其更清晰。那么PlayerAccount中的所有其他字段如何?最后,我希望能够从RESTAPI中搜索我的对象的所有字段,只需最少的编码。这就是为什么我认为使用查询dsl很方便的原因。但是,如果有其他更简洁的方法,请给我指一个教程,说明如何做到这一点。对于同名的多个参数,可以使用映射。我没有任何要共享的链接,但我会寻找一些可能对您有帮助的内容。假设我有一个MyEntity实体,它由10个不同的字段(具有不同的名称和类型)组成。我想很容易地搜索它。如果我创建了一个MyEntityRepository接口,该接口扩展了QueryDSLDPredicateExecutor(和JpaRepository),而不需要任何其他代码,那么我就能够轻松地在数据库中搜索myEntity实体。现在我只想将该功能公开给Rest端点。理想情况下,如果我在MyEntity中添加一个新字段,我希望API能够自动处理该新字段,就像存储库一样。使用您的方法,我必须修改控制器。
public interface MyEntityRepository extends JpaRepository<MyEntity, Long>, QuerydslPredicateExecutor<MyEntity> {
}
@RestController
public class MyClass {

    @Autowired
    private final MyRepository repository;
    @GetMapping("/playerAccount")
    public Iterable<PlayerAccount> getPlayerAccounts() {
        return repository.findAll();
    }
@RestController
public class MyClass {

    @Autowired
    private final MyRepository repository;
    @GetMapping("/playerAccount")
    public Iterable<PlayerAccount> getPlayerAccounts(@RequestParam(required = false) Long id) {
        return repository.findById(id);
    }
.../playerAccount?id=6