我正在尝试将以下对象转换为查询字符串,以便可以与GET请求一起使用。
Class A {
String prop1;
String prop2;
Date date1;
Date date2;
ClassB objB;
}
Class B {
String prop3;
String prop4;
}
我们可以将第一个对象转换为Map,然后使用URIComponentsBuilder.fromHttpUrl("httpL//example.com").queryParams(multiValueMap).build();将map转换为MultiValueMap
有没有更短更好的方法将对象转换为查询字符串,以便在Spring Project for Junit Test中与GET请求一起使用?
发布于 2018-09-26 06:11:29
为什么先转换成Map
,然后再转换成MultiValueMap
,而不是直接构建它呢?
DateFormat dateFmt = new SimpleDateFormat("whatever date format you want");
URIComponentsBuilder.fromHttpUrl("httpL//example.com")
.queryParam("prop1", a.prop1)
.queryParam("prop2", a.prop2)
.queryParam("date1", dateFmt.format(a.date1))
.queryParam("date2", dateFmt.format(a.date2))
.queryParam("prop3", a.objB.prop3)
.queryParam("prop4", a.objB.prop4)
.build();
发布于 2018-09-26 08:45:15
您可以编写自己的使用java.lang.reflect
的方法。下面是一个例子
public static String getRequestString(String urlString, Class clazz, Object o){
String queryString = "?";
try {
for (Field f : clazz.getDeclaredFields()) {
f.setAccessible(true);
queryString += queryString.concat(f.getName() + "=" + String.valueOf(f.get(o)) + "&");
}
}catch (Exception e){
e.printStackTrace();
}
return urlString + queryString.substring(0,queryString.length()-1);
}
发布于 2018-09-26 07:28:11
OpenFeign具有注释@QueryMap
,用于根据对象属性以dinamicaly方式生成查询参数:
public interface Api {
@RequestLine("GET /find")
V find(@QueryMap CustomPojo customPojo);
}
欲了解更多信息,请访问:https://github.com/OpenFeign/feign#dynamic-query-parameters
https://stackoverflow.com/questions/52506949
复制相似问题