美文网首页
2021-11-04 springboot 如何实现使用反射实现

2021-11-04 springboot 如何实现使用反射实现

作者: scoot929 | 来源:发表于2021-11-04 15:15 被阅读0次

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;
  }

相关文章

网友评论

      本文标题:2021-11-04 springboot 如何实现使用反射实现

      本文链接:https://www.haomeiwen.com/subject/swlkzltx.html