Feign客户端是否支持可选的请求参数?
例如,我有一个端点,但是我没有找到一种通过伪装客户端使param1可选的方法。
@GetMapping(path = "endpoint1")
ResponseEntity request(@RequestParam(name = "param1", required = false, defaultValue = "key") String param1){}
由于您使用的是Spring Cloud Feign,所以我发现实现可选参数的最简单方法是使用DTO,并可选地实现构建器模式(Lombok可以使冗长程度降低)。
DTO将使请求中的参数为可选(当为null时),而不是方法签名。方法的可选参数应该几乎是不可能的,但是有些alternatives can be found here。
构建器模式将使初始化参数为可选(或强制性)details can be found here。该构建器还可以用于设置默认值。 Lombok details can be found here。另外,建造者可以手动建造。 Starting at wikipedia。 Some example pure Java code。
代码可能看起来像这样:
@GetMapping(path = "/endpoint1") //Not starting with / does not look ok...
ResponseEntity request(@SpringQueryMap MyDTO);
//MyDTO
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class MyDTO {
private String param1;
private String param2;
private String param3;
}
//when using
request(MyDTO.Builder().build()); //use all defaults
request(MyDTO.Builder().param1("foo").build()); //param1 set, all other defaults
request(MyDTO.Builder().param1("foo").param2("bar").build()); //param1 and param2 set