springboot mongo query
这样就支持直接传入mongo query查询语句来进行查询, 不用写复杂的接口, 而且支持分页
fields
是哪些表格支持, 采用反射来找到对应的domain
简化查询操作
@Slf4j
@RequestMapping("/info/")
@Controller
public class InfoController {
@Inject
private MongoTemplate mongoTemplate;
public static final List<String> fields = Arrays.asList("table1", "table2");
// 数据查询接口
@RequestMapping(value = "/{path}", method = {RequestMethod.GET})
public ResponseEntity<List<Object>> query(@PathVariable(name = "path") String path,
@RequestParam(name = "query", required = false) String queryStr,
@PageableDefault(value = 20, sort = {"id"}, direction = Sort.Direction.DESC) Pageable pageable)
throws ClassNotFoundException {
log.info("table query, queryStr {}", queryStr);
if (!fields.contains(path)) {
return ResponseEntity.ok().body(null);
}
BasicQuery query = new BasicQuery(queryStr);
query.with(pageable);
Class c = Class.forName("com.example.domain." + path);
List<Object> result = mongoTemplate.find(query, c);
return ResponseEntity.ok().body(result);
}
}
需要增加配置, 增加http url 中对于{
,}
的支持
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "|{}[]\\"));
return factory;
}
网友评论