Java 如何使用spring(或其他任何工具)将对象转换为查询字符串?
是否有方法将对象转换为GET请求的查询参数? 某种序列化程序,将NameValuePair对象转换为name=aaa&value=bbb,以便将字符串附加到GET请求 换句话说,我正在寻找一个可以容纳Java 如何使用spring(或其他任何工具)将对象转换为查询字符串?,java,http,spring-mvc,Java,Http,Spring Mvc,是否有方法将对象转换为GET请求的查询参数? 某种序列化程序,将NameValuePair对象转换为name=aaa&value=bbb,以便将字符串附加到GET请求 换句话说,我正在寻找一个可以容纳 1.url(http://localhost/bla) 2.对象: 公共类对象{ 字符串id; 列出实体; } 并将其转换为: http://localhost/bla?id=abc&entities[0]。名称=aaa&实体[0]。值=bbb Spring RestTemplate不是我想要的,
1.url(
http://localhost/bla
)2.对象:
公共类对象{
字符串id;
列出实体;
}
并将其转换为:
http://localhost/bla?id=abc&entities[0]。名称=aaa&实体[0]。值=bbb
Spring RestTemplate不是我想要的,因为它除了将对象转换为参数字符串之外,还做其他所有事情。使用com.sun.jersey.api.client.client:
Client.create().resource("url").queryParam(key, value).get()
//要映射的对象
ObjectMapper ObjectMapper=新的ObjectMapper();
Map Map=objectMapper.convertValue(obj,newtypereference(){});
//映射到多值映射
LinkedMultiValueMap LinkedMultiValueMap=新建LinkedMultiValueMap();
forEach(e->linkedMultiValueMap.add(e.getKey(),e.getValue());
//调用restemplate.exchange
返回getRestTemplate().exchange(
uriBuilder().path(“您的路径”).queryParams(linkedMultiValueMap).build().Tori(),
HttpMethod.GET,
无效的
新的ParameteredTypeReference(){}).getBody();
package-util;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入java.util.Map;
公共类ObjectConvertUtil{
//将对象转换为查询字符串
公共静态字符串TOQ(对象){
//对象-->映射
ObjectMapper ObjectMapper=新的ObjectMapper();
地图=
objectMapper.convertValue(
对象,Map.class);
StringBuilder qs=新的StringBuilder();
for(字符串键:map.keySet()){
if(map.get(key)==null){
继续;
}
//键=值&
qs.append(键);
q.追加(“=”);
qs.append(map.get(key));
q.追加(“&”);
}
//删除最后一个“&”
如果(qs.length()!=0){
qs.deleteCharAt(qs.length()-1);
}
返回qs.toString();
}
}
com.fasterxml.jackson.core
杰克逊数据绑定
2.9.8
如果您使用的是RESTFUL通信,是的。您可以在上找到一个简单的示例,实际上我问的是相反的问题。我想编写java客户机,它可以向这样的控制器发送请求。我需要将一个对象转换为参数。在这种情况下
// object to Map
ObjectMapper objectMapper = new ObjectMapper();
Map<String, String> map = objectMapper.convertValue(obj, new TypeReference<Map<String,String>>() {});
// Map to MultiValueMap
LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>();
map.entrySet().forEach(e -> linkedMultiValueMap.add(e.getKey(), e.getValue()));
// call RestTemplate.exchange
return getRestTemplate().exchange(
uriBuilder().path("your-path").queryParams(linkedMultiValueMap).build().toUri(),
HttpMethod.GET,
null,
new ParameterizedTypeReference<List<YourTypes>>() {}).getBody();