Skip to content

How to post url-encoded form in FeignClient from custom Feign.Builder? #2152

Description

@sgpublic

Hello, the problem in short is that when using a custom Feign.Builder, I cannot use FeignClient to post a url-encoded form, it will post an empty string.

In particular, I have a FeignClient:

public interface FeignClientTest {
    @PostMapping(value = "/test", consumes = {
            MediaType.APPLICATION_FORM_URLENCODED_VALUE
    })
    String callTest(TestBody body);

    record TestBody(
            @FormProperty("test1") String test1,
            @FormProperty("test2") String test2
    ){ }
}

And I create the instance by custom Feign.Builder:

@Import({FeignClientsConfiguration.class})
@Configuration
@RequiredArgsConstructor
public class FeignClientConfig {
    private final Encoder encoder;
    private final Decoder decoder;
    private final Contract contract;

    private Feign.Builder feignBuilder() {
        return Feign.builder()
                .encoder(new SpringFormEncoder())
                .decoder(decoder)
                .contract(contract)
                .logLevel(Logger.Level.FULL);
    }

    @Bean
    public FeignClientTest feignClientTest() {
        return feignBuilder()
                .logger(new Slf4jLogger(FeignClientTest.class))
                .target(FeignClientTest.class, "http://127.0.0.1:8080/");
    }
}

When I call it like this:

    @Autowired
    private FeignClientTest client;

    @GetMapping("/something")
    public String keep() {
        return client.callTest(new FeignClientTest.TestBody("test1", "test2"));
    }

I got these logs:

2023-08-11T18:55:52.421+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] ---> POST http://127.0.0.1:8080/test HTTP/1.1
2023-08-11T18:55:52.421+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] Content-Type: application/x-www-form-urlencoded; charset=UTF-8
2023-08-11T18:55:52.421+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] 
2023-08-11T18:55:52.422+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] 
2023-08-11T18:55:52.422+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] ---> END HTTP (0-byte body)
2023-08-11T18:55:52.452+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] <--- HTTP/1.1 200 (30ms)
2023-08-11T18:55:52.453+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] connection: keep-alive
2023-08-11T18:55:52.453+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] content-length: 12
2023-08-11T18:55:52.453+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] content-type: text/plain;charset=UTF-8
2023-08-11T18:55:52.453+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] date: Fri, 11 Aug 2023 10:55:52 GMT
2023-08-11T18:55:52.453+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] keep-alive: timeout=60
2023-08-11T18:55:52.453+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] 
2023-08-11T18:55:52.454+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] Hello World!
2023-08-11T18:55:52.454+08:00 DEBUG 53840 --- [nio-8080-exec-1] c.e.openfeignclienttest.FeignClientTest  : [FeignClientTest#callTest] <--- END HTTP (12-byte body)

It seems that Feign post a empty body, is there anything I did wrong? Thank you in advance!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions