4

我正在使用需要设置一些字段的 REST api。我的应用程序应始终将某些字段设置为相同的值。是否可以使用 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();
}
4

2 回答 2

2

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

@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,你可以使用 annotation 来做到这一点@Body

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

编辑

根据 Github 存储库文档,如果您使用的是 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。

于 2016-12-02T07:38:43.553 回答
0

我也有同样的情况。

问题解决如下:

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

例如:

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

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

于 2020-05-07T07:51:54.600 回答