虚假客户端对可选请求参数的支持

问题描述 投票:0回答:1

Feign客户端是否支持可选的请求参数?

例如,我有一个端点,但是我没有找到一种通过伪装客户端使param1可选的方法。

@GetMapping(path = "endpoint1")
ResponseEntity request(@RequestParam(name = "param1", required = false, defaultValue = "key") String param1){}
spring-cloud-feign feign
1个回答
0
投票

由于您使用的是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 wikipediaSome 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
© www.soinside.com 2019 - 2024. All rights reserved.