使用 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)。
我正在使用需要设置几个字段的 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)。