如何在restful服务中进行正则表达式过滤

时间:2017-12-19 16:45:18

标签: java jquery spring-boot

我需要在spring-boot上编写web服务,只需使用例如:

/hello/contacts?nameFilter=^.*[abc].*$ 并返回DB中没有符号a,b,c的所有名称(就像反向)等等。

在控制器类中我有这个:

@RequestMapping(value = "/contacts",
                method = RequestMethod.GET,
                produces = {MediaType.APPLICATION_JSON_VALUE}
)
List<Contact> getAllContactsByName(@RequestParam(name = "nameFilter") String nameFilter);

服务类:

@Autowired
private ContactDao contactDao;

@Override
public List<Contact> getContactsByNameFilter(String nameFilter) {
    return nameFilter == "" ? findAllContacts() : contactDao.findByRegex(nameFilter);
}


public List<Contact> findAllContacts(){
    return contactDao.findAll();
}

我应该如何在dao图层类中实现方法findByRegex(nameFilter)? 我必须在服务类中进行反向过滤,而不是在dao中。以及如何在不使用sql的情况下完成它。

对不起有些错误和我的英语,刚开始学习spring-boot之后的java se课程。

1 个答案:

答案 0 :(得分:0)

  

如何在不使用sql的情况下完成。

完全没有SQL的唯一方法是将所有联系人提取到内存中,并根据给定的RegEx测试每个联系人,忽略那些匹配的联系人。例如(使用Java 8功能)

public List<Contact> findByRegex(String nameFilter) {
    return contactDao.findAll().stream()
                .filter(c -> !c.getName().matches(nameFilter))
                .collect(Collectors.toList());
}

或者你的意思是

  

如果不使用 PLAIN sql,我该怎么做呢。

然后你可以尝试JPQL / HQL / CriteriaAPI