我正在尝试返回从请求的查询中创建的Json。
例如:
url.com?field1=value1&field2=value2&field1=value3
"queryString": {
"field1": [
"value1",
"value3"
],
"field2": "value2"
}"queryString": {
"field1": [
"value1",
"value3"
],
"field2": [
"value2"
]
}对于field2,我希望值是"value2",而不是数组"value2"。
守则是:
@JsonGetter("queryString")
public MultiValueMap<String, String> getQueryString() {
String queryString = Optional.ofNullable(httpRequest.getQueryString()).orElse("");
// queryString is for our example : field1=value1&field2=value2&field1=value3
return UriComponentsBuilder.fromUriString("?" + queryString).build().getQueryParams();
}我应该使用不同的收藏吗?哪个?
String或List<String>。发布于 2022-09-28 21:54:27
根据定义,MultiValueMap存储一个键和一个值列表,所以序列化看起来像{"key":["value1", "value2"]}是有意义的。
假设这是您想要做的事情,下面是几种方法:
field1和field2的类型,这样您就可以定义一个类来很好地捕获该信息: class MyClass {
private final List<String> field1;
private final String field2;
public MyClass(List<String> field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
public List<String> getField1() {
return field1;
}
public String getField2() {
return field2;
}
}
@JsonGetter("queryString")
public MyClass getQueryString() {
String queryString = "url.com?field1=value1&field2=value2&field1=value3";
MultiValueMap<String, String> queryParams = UriComponentsBuilder.fromUriString(queryString).build().getQueryParams();
return new MyClass(queryParams.get("field1"), queryParams.getFirst("field2"));
}MultiValueMap<String, String>转换为Map<String, Object>,这将得到您所希望的序列化(基于MultiValueMapAdapter.toSingleValueMap() )。 @JsonGetter("queryString")
public Map<String, Object> getQueryString() {
String queryString = "url.com?field1=value1&field2=value2&field1=value3";
MultiValueMap<String, String> queryParams = UriComponentsBuilder.fromUriString(queryString).build().getQueryParams();
Map<String, Object> singleValueMap = CollectionUtils.newLinkedHashMap(queryParams.size());
for (Entry<String, List<String>> entry : queryParams.entrySet()) {
if (entry.getValue() != null && !entry.getValue().isEmpty()) {
if (entry.getValue().size() == 1) {
singleValueMap.put(entry.getKey(), entry.getValue().get(0));
} else {
singleValueMap.put(entry.getKey(), entry.getValue());
}
}
}
return singleValueMap;
}注在这些示例中可能需要处理额外的边缘情况,例如空列表和空列表。
https://stackoverflow.com/questions/73816939
复制相似问题