按值 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”的内容。
我正在尝试按值过滤传入的 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”的内容。