使用 netflix feign 设置静态(常量)POST 参数

Setting a static (constant) POST parameter with netflix feign

我正在使用需要设置几个字段的 REST api。我的应用程序应始终将某些字段设置为相同的值。是否可以在接口中使用假定义(或其他地方)使这些值 "hard coded"?

我的 feign 声明看起来像示例。比方说,我一直想从这个应用程序中使用同一个代理。可行吗?

@RequestLine("POST /files")
@Headers("Content-Type: application/json")
default FileMetadata addFile(@Param("file_name") String fileName,
                             @Param("agent") String agent,
                             @Param("md5") String md5,
                             @Param("file_type") String fileType) {
    return new FileMetadata.Builder().build();
}

您有不同的选择,如果您使用 Spring 注释,您可以使用 defaultValue 注释 属性 来确定默认值

@RequestParam(value = "agent", required = false, defaultValue = "AnyAgent") String agent

但是如果你使用的是 netflix-feign 注释,并且看起来这就是你正在做的,你需要在路径中添加,即在 @RequestLine 注释中:

static final String DEFAULT_VALUE_AGENT = "agent";
@RequestLine("POST /files?agent=" + DEFAULT_VALUE_AGENT)
....

但是如果你指的是 Body POST,你可以使用注释 @Body:

@RequestLine("POST /files")
@Body("%7B\"file_name\": \"{user_name}\", \"agent\":  \"" + DEFAULT_VALUE_AGENT  +"\"%7D") //... other params..
....

编辑

基于 Github 存储库 documentation,如果您使用的是 Java 8,您可以使用默认方法调用另一个带有参数常量的方法。就像下一个

@RequestLine("POST /files")
@Headers("Content-Type: application/json")
FileMetadata addFile(@Param("file_name") String fileName,
                         @Param("agent") String agent,
                         @Param("md5") String md5,
                         @Param("file_type") String fileType);

@RequestLine("POST /files")
@Headers("Content-Type: application/json")
default FileMetadata addFileConstant(@Param("file_name") String fileName,
                         @Param("md5") String md5,
                         @Param("file_type") String fileType) {
    addFile(fileName, "constant_value", md5, fileType);
}

就我个人而言,我认为比我之前提出的其他选项更灵活。如果它们是参数,这个想法也适用于 POST Body。

我遇到了同样的情况。

问题解决如下:

将此添加到我正在访问的服务器上的主 api(即,在接收端,而不是发送端请求)。

例如:

@RequestParam(value = "code", required = false, defaultValue = "AAA") String code

Required 是 required = false(而不是 required = true)。