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

时间:2016-11-30 12:08:05

标签: netflix-feign spring-cloud-feign

我使用REST api,需要设置几个字段。我的应用程序应始终将某些字段设置为相同的值。是否有可能使这些价值观和#34;硬编码"在假装定义的界面(或其他地方)?

我的假装声明就像是一个例子。让我们说我总是想在这个应用程序中使用相同的代理。那是可行的吗?

@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();
}

2 个答案:

答案 0 :(得分:2)

您有不同的选择,在使用Spring Annotations的情况下,您可以使用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,则可以执行一个默认方法,该方法使用param常量调用另一个方法。就像下一个

@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);
}

就我个人而言,我认为比我之前提出的其他方案更灵活。如果它们是params,那么这个想法也适用于POST Body。

答案 1 :(得分:0)

我有同样的情况。

问题解决如下:

将此添加到我要关闭的服务器上的主api(即,在接收方,而不是在发送方请求上)。

例如:

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

必填项是 required = false (而不是 required = true )。