【问题标题】:Setting a static (constant) POST parameter with netflix feign使用 netflix feign 设置静态(常量)POST 参数
【发布时间】:2017-04-14 18:05:06
【问题描述】:

我正在使用需要设置一些字段的 REST api。我的应用程序应始终将某些字段设置为相同的值。是否可以在接口中使用 feign 定义(或其他地方)使这些值“硬编码”?

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

【问题讨论】:

    标签: netflix-feign spring-cloud-feign


    【解决方案1】:

    您有不同的选择,如果您使用 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,您可以使用默认方法调用带有参数常量的其他方法。就像下一个

    @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。

    【讨论】:

    • 谢谢!在此之前,我意识到在我的其他语句之一(在 @RequestLine 注释中指定为 GET)中,我错过了指定请求行。这导致了 POST 而不是 GET。我不明白为什么 feign 注释需要我指定请求获取参数,信息已经存在......是否有任何描述这些行为的 API 文档或 feign 参考?
    • 我知道的唯一文档在这里:github.com/OpenFeign/feign。它也有一些例子
    • 请检查我的问题,他看起来像:stackoverflow.com/questions/61620137/…
    【解决方案2】:

    我也有同样的情况。

    问题解决如下:

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

    例如:

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

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

    【讨论】:

    • 我需要客户端的默认值,服务器根据架构和设计,没有默认值。我会说,为单个客户端安装服务器并不是一个好主意。
    猜你喜欢
    • 2017-10-01
    • 2016-02-06
    • 2019-07-27
    • 2018-02-01
    • 1970-01-01
    • 2015-02-08
    • 2016-06-21
    • 2016-12-11
    • 2018-09-24
    相关资源
    最近更新 更多