【发布时间】:2017-03-15 12:17:54
【问题描述】:
我有一个实体对象,我使用 Spring Data MongoDB 将其保存在 MongoDB 中,并公开一个 REST API 来查询它。实体如下所示:
Entity.java
@Document
public class Entity {
@Id
String id;
Map<String, String> properties;
}
对应的Spring Data存储库如下。它利用 Spring Data MongoDB 与 QueryDsl 的集成:
EntityRepository.java
public interface EntityRepository extends MongoRepository<Entity, String>
,QueryDslPredicateExecutor<Entity> {
}
这是我查询存储实体的控制器:
EntityController.java
@RestController
@RequestMapping(value = "/entities")
public class EntityController {
private static final Logger logger = LoggerFactory.getLogger(EntityController.class);
@Autowired
EntityRepository entityRepository;
@RequestMapping(method = RequestMethod.GET)
public Page<Entity> findAllEntities(Pageable pageable) throws ResourceQueryException {
return entityRepository.findAll(pageable);
}
@RequestMapping(method = RequestMethod.GET, value = "/q")
public Page<Entity> filterEntities(
@QuerydslPredicate(root = Entity.class) Predicate predicate,
Pageable pageable) {
return entityRepository.findAll(predicate,pageable);
}
}
当我点击 url localhost:8080/entities/q?id=xxx 时,它按预期工作。但是,当我点击 url localhost:8080/entities/q?properties.p1=v1(查询 Map 属性的键和值)时,我的方法中得到一个空谓词,因此所有实体都被返回。
如何让它正常工作?
【问题讨论】:
标签: java spring spring-data-mongodb spring-data-rest querydsl