如何使用 Feign 框架将 URL 参数添加为 JSON?
How to add URL parameter as JSON using Feign framework?
我做了一个rest client,使用feign框架,如下:
@Headers({"Content-Type: application/x-www-form-urlencoded"})
public interface CampaignTrigger {
@RequestLine("POST /event?actid={actid}&key={key}&event={event}&visit={visit}")
TriggerResponse trigger(@Param("visit") Map<String, String> visit, @Param("actid") String actid, @Param("key") String key, @Param("event") String event);
}
结果如下:
http://www.example.com/event?actid=1234&key=1234&event=cool_event&visit={email=someone@hosting.com}
我想要的是 'visit' 参数是 json,像这样:
http://www.example.com/event?actid=1234&key=1234&event=cool_event&visit={"email":"someone@hosting.com"}
谁知道如何做到这一点?
您可以定义自己的 Param.Expander
来实现它,如下所示。
@Headers({"Content-Type: application/x-www-form-urlencoded"})
public interface CampaignTrigger {
@RequestLine("POST /event?actid={actid}&key={key}&event={event}&visit={visit}")
TriggerResponse trigger(@Param(value="visit", expander = JSONExpander.class) Map<String, String> visit, @Param("actid") String actid, @Param("key") String key, @Param("event") String event);
}
static final class JSONExpander implements Param.Expander {
@Override
public String expand(Object value) {
// convert value to json string and return it.
return xxxx;
}
}
我做了一个rest client,使用feign框架,如下:
@Headers({"Content-Type: application/x-www-form-urlencoded"})
public interface CampaignTrigger {
@RequestLine("POST /event?actid={actid}&key={key}&event={event}&visit={visit}")
TriggerResponse trigger(@Param("visit") Map<String, String> visit, @Param("actid") String actid, @Param("key") String key, @Param("event") String event);
}
结果如下:
http://www.example.com/event?actid=1234&key=1234&event=cool_event&visit={email=someone@hosting.com}
我想要的是 'visit' 参数是 json,像这样:
http://www.example.com/event?actid=1234&key=1234&event=cool_event&visit={"email":"someone@hosting.com"}
谁知道如何做到这一点?
您可以定义自己的 Param.Expander
来实现它,如下所示。
@Headers({"Content-Type: application/x-www-form-urlencoded"})
public interface CampaignTrigger {
@RequestLine("POST /event?actid={actid}&key={key}&event={event}&visit={visit}")
TriggerResponse trigger(@Param(value="visit", expander = JSONExpander.class) Map<String, String> visit, @Param("actid") String actid, @Param("key") String key, @Param("event") String event);
}
static final class JSONExpander implements Param.Expander {
@Override
public String expand(Object value) {
// convert value to json string and return it.
return xxxx;
}
}