按值 spring java 过滤 JSON

Filter JSON by value spring java

我正在尝试按值过滤传入的 JSON。这是我从 jira api 收到一个巨大的 JSON 生成的当前 JSON。我有几个 POJO classes 来处理响应并只获取我现在需要的字段。但我需要只包含少数字符串的“fromString”和“toString”键,如“To Do”、“Done”、“QA To Do”。我尝试使用 FilterProvider 但我不知道如何按值过滤然后将其添加到我的 GetMapping。

这是我控制器中当前的 GetMapping class,它创建一个响应并仅针对键“fromString”过滤项目[]:


    @GetMapping("/")
    public MappingJacksonValue run() throws Exception {
            IssuesList response = rest.getForObject(
                    "https://.../rest/api/2/search?jql=project="+projectId+ " AND status in (done) AND issuetype in (Story)&expand=changelog",
                    IssuesList.class);

              List<Issues> issuesData = response.getIssuesList();

        MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(issuesData);
        FilterProvider filterProvider = new SimpleFilterProvider().addFilter("itemsEntity", SimpleBeanPropertyFilter.filterOutAllExcept("fromString"));
        mappingJacksonValue.setFilters(filterProvider);

        log.info(mappingJacksonValue.toString());
        return mappingJacksonValue;
    }


我的 Pojo class 有以下物品:

@Data
@JsonFilter("itemsEntity")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Items {

    @JsonProperty("fromString")
    private String fromString;
    @JsonProperty("toString")
    private String toString;

    @Override
    public String toString() {
        return "{" +
                "fromString= " + '\'' + fromString+ '\'' +
                ", toString= " + '\'' + toString +  '\'' +
                '}';
    }
}

这是我根据收到的响应生成的当前 JSON,我希望它跳过所有不包含以下内容之一的“fromString”和“toString”键:“To Do” ,“完成”,“待办事项”等。 我该如何实现?

[
    {
        "key": "PE-1322",
        "fields": {
            "issuetype": {
                "name": "Story"
            },
            "created": "2020-11-18T09:16:55.816+0000",
            "customfield_10105": 3
        },
        "changelog": {
            "histories": [
                {
                    "created": "2020-12-17T08:57:28.800+0000",
                    "items": [
                        {
                            "fromString": "This issue relates to TD-353"
                        }
                    ]
                },
                {
                    "created": "2020-12-17T08:57:19.233+0000",
                    "items": [
                        {
                            "fromString": null
                        }
                    ]
                }
            ]
        }
    }
]

您需要编写自己的过滤器,使用适合您需要的比较器。

例如:

filteredList = Arrays.stream(unfilteredList).filter(listItem -> listItem.contains("To Do")).toArray(String[]::new);

在这种情况下,过滤器将过滤掉任何不包含字符串“To Do”的内容。