SpringデータMongoDBを使用してMongoDBで永続化しているRend APIを公開しているエンティティオブジェクトがあります。エンティティは、次のようになります。春データリポジトリを対応SpringデータREST、QueryDSL、HashMaps - HashMapプロパティを参照するときのURLからのNull述語
Entity.java
@Document
public class Entity {
@Id
String id;
Map<String, String> properties;
}
以下の通りです。それはQueryDslと春データのMongoDBの統合を活用:
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
プロパティの値)をヒットすると、私のメソッドでnull述語が返されるため、すべてのエンティティが返されます。
これを正しく動作させるにはどうすればよいですか?
ありがとう!しかし、このスキーマを使用している間は、特定のプロパティを持つオブジェクトを照会するのが難しくなり、$ elematch構造に頼らざるを得なくなりました。 Spring Data Webでこれをサポートすることは、ひどく欠けているようです。 URLからPredicateオブジェクトを自動的に作成しながら問題に直面していたので、私は上記のMapアプローチに頼らなければなりませんでした。 –
しかし、実際には、ここのようなカスタマイズしたバインディングを書くことができます:https://github.com/spring-projects/spring-data-examples/tree/master/web/querydsl構造は、 p1 = p2 'は機能しませんか、コンソールなどからあなたのために動作しますか? –