Skip to content

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

@sgpublic

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!

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