【问题标题】:Filtering findAll using Spring web and data使用 Spring Web 和数据过滤 findAll
【发布时间】:2018-09-06 18:09:06
【问题描述】:

在使用 Spring Boot 设计新应用程序时。我想有一个休息端点来查找所有具有如下过滤器的实体

获取http://foo.com/entities?firstName=test&lastName=test2

实现如下所示。

@RequestMapping(value = /entities, method = RequestMethod.GET)
public List<Entity> getAll(@RequestParam(value = "firstName", required = false) String firstName, @RequestParam(value = "lastName", required = false) String lastName) {
  if (firstName != null && lastName != null) {
    return entityRepository.findByFirstNameAndLastName(firstName, lastName);
  } else if (firstName != null) {
    return entityRepository.findByFirstName(firstName);
  } else if (lastName != null) {
    return entityRepository.findByLastName(lastName);
  } else {
    return StreamSupport.stream(entityRepository.findAll().spliterator(), false).collect(Collectors.toList());
  }
}

我们可以看到,如果我们必须添加新参数,这会有点失控。减轻这种情况的最简单方法是什么。或者我应该改变设计。我以为这是标准做法?

注意。存储库是一个带有添加方法的 CRUDRepository。

【问题讨论】:

  • 你可以试试这个方法stackoverflow.com/a/48596145
  • @Cepr0 谢谢,这正是我想要的
  • 如果答案对你有帮助,别忘了点赞。;)

标签: spring-boot spring-data-jpa spring-web


【解决方案1】:

我认为您应该创建某种“SearchUtils”并使用 Criteria API。 例如:

public class SearchCriteria {

public SearchCriteria() {
}

private String firstName;

private String lastName;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

}

SearchUtils 类:

public class SearchUtils {


List<Entity> search(SearchCriteria criteria){

    //use Criteria API here



}

}

和控制器:

@RequestMapping(value = /entities, method = RequestMethod.GET)
public List<Entity> getAll(@Valid SearchCriteria searchCriteria) 
{
return searchUtils.search(searchCriteria);
}

详细了解 CriteriaAPI herehere

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2013-12-15
    • 2016-08-18
    • 2016-02-12
    • 2017-05-31
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多