发送多个按键到Feign客户端

huangapple go评论97阅读模式
英文:

Send multiple key in Feign Client

问题

  1. 我有一个使用Feign Client进行表单URL编码的nxt请求POST
  2. @FeignClient(
  3. url = "${url}", configuration = NxtApi.Configuration.class)
  4. public interface NxtApi {
  5. @PostMapping(value = "nxt", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
  6. String new(
  7. @RequestParam String requestType, @RequestBody Map<String, ?> payload);
  8. class Configuration {
  9. @Bean
  10. Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
  11. return new SpringFormEncoder(new SpringEncoder(converters));
  12. }
  13. @Bean
  14. Logger.Level feignLoggerLevel() {
  15. return Logger.Level.FULL;
  16. }
  17. }
  18. }
  19. 我想要发送相同的键和两个值
  20. Map<String, Object> param = new HashMap<>();
  21. param.put("filter", valueOne);
  22. param.put("filter", valueTwo);
  23. api.new("asset", param);
  24. **我需要像这样的内容**
  25. filter=valueOne&amp;filter=valueTwo
  26. 但它被发送成这样日志中的请求响应
  27. filter=[valueOne, valueTwo]
  28. 感谢任何帮助
英文:

I have a nxt request POST with form url encoded using Feign Client

  1. @FeignClient(
  2. url = &quot;${url}&quot;, configuration = NxtApi.Configuration.class)
  3. public interface NxtApi {
  4. @PostMapping(value = &quot;nxt&quot;, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
  5. String new(
  6. @RequestParam String requestType, @RequestBody Map&lt;String, ?&gt; payload);
  7. class Configuration {
  8. @Bean
  9. Encoder feignFormEncoder(ObjectFactory&lt;HttpMessageConverters&gt; converters) {
  10. return new SpringFormEncoder(new SpringEncoder(converters));
  11. }
  12. @Bean
  13. Logger.Level feignLoggerLevel() {
  14. return Logger.Level.FULL;
  15. }
  16. }
  17. }

I want to send the same key with two values

  1. Map&lt;String, Object&gt; param = new HashMap&lt;&gt;();
  2. param.put(&quot;filter&quot;, valueOne);
  3. param.put(&quot;filter&quot;, valueTwo);
  4. api.new(&quot;asset&quot;,param);

I need something like that

  1. filter=valueOne&amp;filter=valueTwo

But it's being sent like this (Request response in the log)

  1. filter=[valueOne,valueTwo]

Thanks for any help.

答案1

得分: 2

你需要使用一个字符串值的列表(List of String values)来代替一个映射(Map)。

  1. @PostMapping(value = "nxt", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
  2. String new(@RequestParam String requestType, @RequestParam("filter") List<String> filter, @RequestBody Map<String, ?> payload);

我在这里找到了它:https://stackoverflow.com/questions/41744542/spring-cloud-feign-client-requestparam-with-list-parameter-creates-a-wrong-requ

英文:

You will have to use a List of String values instead of a Map.

  1. @PostMapping(value = &quot;nxt&quot;, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
  2. String new(@RequestParam String requestType, @RequestParam(&quot;filter&quot;) List&lt;String&gt; filter, @RequestBody Map&lt;String, ?&gt; payload);

as I found it here: https://stackoverflow.com/questions/41744542/spring-cloud-feign-client-requestparam-with-list-parameter-creates-a-wrong-requ

huangapple
  • 本文由 发表于 2020年10月23日 22:16:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/64501718.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定