java - 根据属性值 spring boot 从列表中过滤对象

标签 java json spring spring-boot jackson

我有一个 rest 服务,它将返回对象的 List

public class MyObject {
    private String name;
    private String state;
}

现在,我需要根据 rest 调用中提供的字段从列表中过滤对象:

http://localhost:8080/myuri?state=NY

现在,我需要开发自定义过滤器,但我只找到了 property filter不是我想要的东西。有没有办法实现这一目标。

最佳答案

您不需要使用 Jackson 来执行此操作。只需使用 Stream API 过滤它。如果数据是从 DB 加载的,则使用 SQLWHERE 子句对其进行过滤。

例子:

@GetMapping(value = "/states", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<MyObject> loadStates(@RequestParam(name = "state", defaultValue = "NY", required = false) String[] states) {
    return service.loadAndFilterByState(states);
}

如果你有一个缓存列表,你可以像下面这样过滤它:

@GetMapping(value = "/states", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<MyObject> loadStates(@RequestParam(name = "state", defaultValue = "NY", required = false) String[] states) {
    Arrays.sort(states);
    return getStates()
            .stream()
            .filter(s -> Arrays.binarySearch(states, s.getState()) > -1)
            .collect(Collectors.toList());
}

另见:

关于java - 根据属性值 spring boot 从列表中过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258475/

相关文章:

java - Gmail API 配置问题(Java 中)

Spring Data JPA 存储库、Spring 中的事务和事件

java - 获取请求仅适用于尾部斜杠(spring REST 注释)

java - JSONJAXBContext jersey 1.x 到 2.x 的迁移

java - 如何将时间设置为纪元时间java?

java - 如何仅将 1 个元素传递给 ArrayAdapter 并确保它只显示唯一的项目

PHP->Python JSON 问题

C# 反序列化 JSON html 字符串

c# - 将 json 文件转换为字符串

Java - 程序在不应该接受负数的情况下接受负数